当从其他程序调用pyowm时,不能从其他程序调用pyowm

2024-05-23 15:50:44 发布

您现在位置:Python中文网/ 问答频道 /正文

pyowm库允许从https://openweathermap.org获取天气预报。它在我编写的一个下载近期预测的小程序中运行得很好(见下文,除了我的API键,我已经把它去掉了;插入你自己的API键,你想测试代码,它们可以从openweathermap免费获得)。在

#!/usr/bin/env python
import pyowm
import json

owm = pyowm.OWM('XXXXXXXXXXXXX')  # You MUST provide a valid API key

forecaster = owm.three_hours_forecast('Santa Fe, US')
forecast = forecaster.get_forecast()
forecastJSON=json.loads(forecast.to_JSON())

def oneForecast():
    mrForecast = forecastJSON['weathers'][:1]
    return mrForecast[0]['detailed_status']

def printForecast():
    print oneForecast()

if __name__ == "__main__":
    printForecast()

从命令行可以完美地工作。但是,如果我创建另一个定期调用oneForecast()的程序,它会第一次返回正确的答案,然后再也不会更改它的预测。在

参见示例

^{pr2}$

这个程序,当从命令行运行时,应该每10秒打印一次简单的预测。由于它每次都会调用API,因此该天气预报应随天气变化而更新,但不会。如果程序第一次运行时预报是“小雨”,它将无限期地每隔10秒打印一次“小雨”,而不会改变。在

我在第二段代码调用第一段代码的方式上犯了错误吗?是否有一些缓存需要刷新?我在这里可能遗漏了什么?在


Tags: import程序apijsondefforecast天气预报openweathermap
1条回答
网友
1楼 · 发布于 2024-05-23 15:50:44

您的oneForecast调用不执行任何操作来获取新的预测,它只是格式化您先前获取的预测。在

这是获取新预测的代码:

forecaster = owm.three_hours_forecast('Santa Fe, US')
forecast = forecaster.get_forecast()

这就是顶层模块代码:它只在每次Python解释器会话中运行一次,当您第一次import该模块时。在

所以,每次调用oneForecast时,您只需要重写代码来执行提取操作,可能如下所示:

^{pr2}$

相关问题 更多 >