Python click模块没有输出?

时间:2019-04-24 22:29:21

标签: python anaconda command-line-interface python-click

我尝试在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.0Python 3.6.7 (default, Oct 22 2018, 11:32:17)

1 个答案:

答案 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。它可以使这种工作变得更加容易。