pyowm调用在自己的程序中有效,但从其他程序调用时无效

时间:2018-08-18 19:38:17

标签: python function weather-api

pyowm库允许一个人从https://openweathermap.org获取天气预报。在我编写的一个用于下载近期预测的小程序中,它的效果很好(请参见下文,除了我已X删除的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()的程序,它将在第一次返回正确答案,然后再也不会更改其预测。

例如参见

#!/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时,该天气预报应随天气变化而更新,但不会更新。如果在程序首次运行时预测为“小雨”,它将无限期每十秒打印一次“小雨”,而无需更改。

第二个代码调用第一个代码的方式是否出错?是否有一些需要刷新的缓存?我在这里可能会缺少什么?

1 个答案:

答案 0 :(得分:1)

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

这是获取新预测的代码:

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

这是顶层模块代码:当您第一次import模块时,它在每个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']