python - 当使用@click.option 将命令行参数传递给函数时,如何返回值?

标签 python python-decorators

我正在尝试使用 click python 包将命令行参数传递给函数。官方文档中的示例按说明工作。但是文档中没有任何地方提到如何返回值。文档中的函数都没有返回值,所以我不明白该怎么做。

文档中的示例:

import click

@click.command()
@click.option('--count', default=3, help='Number of greetings.')

def hello(count):
    """Simple program that greets NAME for a total of COUNT times."""
    for x in range(count):
        click.echo('Hello')

if __name__ == '__main__':
    hello()

我想做的事情:

import click

@click.command()
@click.option('--count', default=3, help='Number of greetings.')

def hello(count):
    """Simple program that greets NAME for a total of COUNT times."""
    for x in range(count):
        click.echo('Hello')
    return "hello hi"

if __name__ == '__main__':
    print(hello())

“hello hi”没有作为输出返回到控制台。谁能告诉我如何实现这一点?

最佳答案

不幸的是,您尝试做的事情没有意义。命令行程序可以有一个退出代码,但那只是一个小整数;它们不能返回文本或任意 Python 对象。

这些整数的含义有一个准标准;简单版本是 0 表示成功,1 表示大多数错误,2 表示无效的命令行参数。 click 试图让你的函数成为一个好的命令行公民,所以当你退出你的函数时,它会调用 sys.exit 并使用适当的数字(如果你 return,如果您 raise 返回 1,如果未能解析您的参数则返回 2)。

因此,无论您返回 什么都没有效果,无论您尝试在顶层使用返回值做什么,都不会运行。

程序在需要“返回”文本时通常会做的是将其打印到标准输出,这正是 click.echo 的用途。

关于python - 当使用@click.option 将命令行参数传递给函数时,如何返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26246824/

相关文章:

python - 使用 Tornado 和 Python Eve 进行非阻塞调用

python - 将 int 列乘以 float 常量 pandas 数据帧

python - 使用装饰器将字典插入 python 类

python - 获取装饰器的可变关键字参数的值

python - 如何装饰从文件导入的所有函数?

python - 将数据帧写入 SQLite 数据库时遇到问题

python - 将 pandas 数据帧转换为具有复合键的稀疏键项矩阵

python - 如何在 macOS 上更快地截取屏幕截图?

python - 装饰外部(库)函数的正确方法是什么?

python - 将两个 python 装饰器合二为一