Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pyowm调用在自己的程序中工作,但在从其他程序调用时不工作_Python_Function_Weather Api - Fatal编程技术网

Python pyowm调用在自己的程序中工作,但在从其他程序调用时不工作

Python pyowm调用在自己的程序中工作,但在从其他程序调用时不工作,python,function,weather-api,Python,Function,Weather Api,pyowm库允许您从中获取天气预报。它在我为下载短期预测而编写的一个小程序中工作得很好(请参见下文,我的API密钥除外,我已将其删除;如果您想测试代码,请插入您自己的API密钥,它们可以从openweathermap免费获得) 这在命令行中非常有效。但是,如果我创建另一个定期调用oneForecast()的程序,它会在第一次返回正确答案,然后再也不会更改其预测 例如,见 #!/usr/bin/env python import time import msForecast def run()

pyowm
库允许您从中获取天气预报。它在我为下载短期预测而编写的一个小程序中工作得很好(请参见下文,我的API密钥除外,我已将其删除;如果您想测试代码,请插入您自己的API密钥,它们可以从openweathermap免费获得)

这在命令行中非常有效。但是,如果我创建另一个定期调用oneForecast()的程序,它会在第一次返回正确答案,然后再也不会更改其预测

例如,见

#!/usr/bin/env python

import time
import msForecast

def run():
    while True:
        text = msForecast.oneForecast()
        print text
        time.sleep(10.0)

if __name__ == "__main__":
    run_text = run()
从命令行运行此程序时,应每10秒打印一次简单的预测。由于它每次都会调用API,因此该预测应该随着天气的变化而更新,但它不会。如果程序第一次运行时预报为“小雨”,它将无限期地每隔10秒打印一次“小雨”,而不会改变


我是否在第二位代码调用第一位代码的方式中犯了错误?是否有需要刷新的缓存?这里可能缺少什么?

您的
oneForecast
调用不做任何事情来获取新的预测,它只是格式化您先前获取的预测

这是获取新预测的代码:

forecaster = owm.three_hours_forecast('Santa Fe, US')
forecast = forecaster.get_forecast()
这是顶级模块代码:当您第一次导入模块时,每个Python解释器会话只运行一次

因此,每次调用
oneForecast
时,您只需重写代码即可获取,可能如下所示:

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

def oneForecast():
    forecast = forecaster.get_forecast()
    forecastJSON=json.loads(forecast.to_JSON())
    mrForecast = forecastJSON['weathers'][:1]
    return mrForecast[0]['detailed_status']

啊,这是有道理的。函数外部的代码只运行一次。谢谢大家!@MichaelStern有几点想法:1)如果你每10秒进行一次预测调查,你很可能得不到任何更新的数据(我认为OWM API每天都会更改天气预报或类似的数据);2) 仅供参考,PyOWM支持缓存,但默认情况下该功能已禁用(参考-)
forecaster = owm.three_hours_forecast('Santa Fe, US')

def oneForecast():
    forecast = forecaster.get_forecast()
    forecastJSON=json.loads(forecast.to_JSON())
    mrForecast = forecastJSON['weathers'][:1]
    return mrForecast[0]['detailed_status']