我尝试在click
上遵循this tutorial from Dan Bader,但是由于某种原因,该代码在命令行中无法与$ python cli.py 'London'
一起使用,不幸的是它没有返回错误,因此很难进行调查这里发生了什么。
但是,功能current_weather()
在Spyder IDE中的作用就像魅力一样,因此首先我怀疑Python Anaconda版本和click
模块之间存在兼容性问题,因此我完全卸载了Anaconda,现在可以在适用于Ubuntu的Python 3.6.7。
但是我仍然无法使其在CLI中工作,并且它不返回任何错误。我在这里做什么错了?
import click
import requests
SAMPLE_API_KEY = 'b1b15e88fa797225412429c1c50c122a1'
@click.command()
@click.argument('location')
def main(location, api_key):
weather = current_weather(location)
print(f"The weather in {location} right now: {weather}.")
def current_weather(location, api_key=SAMPLE_API_KEY):
url = 'http://samples.openweathermap.org/data/2.5/weather'
query_params = {
'q': location,
'appid': api_key,
}
response = requests.get(url, params=query_params)
return response.json()['weather'][0]['description']
在CLI中:
$ python cli.py
$
$ python cli.py 'London'
$
在Spyder IDE中:
In [1109]: location = 'London'
In [1110]: current_weather(location)
Out[1110]: 'light intensity drizzle'
与pdb
源代码调试器一起使用时,pdb自动进入事后调试,这意味着正在异常退出的程序。但是没有错误...
$ python -m pdb cli.py 'London'
> /home/project/cli.py(2)<module>()
-> import click
(Pdb)
我已安装click-7.0
和Python 3.6.7 (default, Oct 22 2018, 11:32:17)
答案 0 :(得分:1)
您需要致电main()
:
if __name__ == '__main__':
main()
import click
@click.command()
@click.argument('location')
def main(location):
weather = current_weather(location)
print(f"The weather in {location} right now: {weather}.")
def current_weather(location):
return "Sunny"
if __name__ == '__main__':
main()
或者,您可以使用setup tools,然后以这种方式调用main
:
我强烈推荐PyCharm作为Python IDE。它可以使这种工作变得更加容易。