pyowm 调用在自己的程序中有效,但在从其他程序调用时无效
pyowm call works in own program, but not when called from other program
pyowm
库允许从 https://openweathermap.org 获取天气预报。它在我编写的一个下载近期预测的小程序中运行良好(见下文,除了我的 API 键,我已经 X 掉了;插入你自己的 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() 的程序,它会 returns 第一次给出正确答案,然后永远不会更改其预测。
例子见
#!/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()
这个程序,当从命令行 运行 时,应该每十秒打印一次简单的预测。由于它每次都会调用 API,因此该预报应该会随着天气的变化而更新,但事实并非如此。如果在程序第一个 运行 时预测为 'light rain',它将无限期地每十秒打印一次 'light rain',永远不会改变。
我是不是在第二段代码调用第一段代码的方式上出错了?是否有一些缓存需要刷新?我可能在这里遗漏了什么?
您的 oneForecast
调用不会执行任何获取新预测的操作,它只是格式化您之前获取的预测。
这是获取新预测的代码:
forecaster = owm.three_hours_forecast('Santa Fe, US')
forecast = forecaster.get_forecast()
这是顶层模块代码:它只在每个 Python 解释器会话中运行一次,当您首先 import
模块时。
因此,您只需重写代码即可在每次调用 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']
pyowm
库允许从 https://openweathermap.org 获取天气预报。它在我编写的一个下载近期预测的小程序中运行良好(见下文,除了我的 API 键,我已经 X 掉了;插入你自己的 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() 的程序,它会 returns 第一次给出正确答案,然后永远不会更改其预测。
例子见
#!/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()
这个程序,当从命令行 运行 时,应该每十秒打印一次简单的预测。由于它每次都会调用 API,因此该预报应该会随着天气的变化而更新,但事实并非如此。如果在程序第一个 运行 时预测为 'light rain',它将无限期地每十秒打印一次 'light rain',永远不会改变。
我是不是在第二段代码调用第一段代码的方式上出错了?是否有一些缓存需要刷新?我可能在这里遗漏了什么?
您的 oneForecast
调用不会执行任何获取新预测的操作,它只是格式化您之前获取的预测。
这是获取新预测的代码:
forecaster = owm.three_hours_forecast('Santa Fe, US')
forecast = forecaster.get_forecast()
这是顶层模块代码:它只在每个 Python 解释器会话中运行一次,当您首先 import
模块时。
因此,您只需重写代码即可在每次调用 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']