我想使用一些有用的函数作为命令。为此,我正在测试 click
库。我定义了我的三个原始函数,然后装饰为 click.command
:
import click
import os, sys
@click.command()
@click.argument('content', required=False)
@click.option('--to_stdout', default=True)
def add_name(content, to_stdout=False):
if not content:
content = ''.join(sys.stdin.readlines())
result = content + "\n\tadded name"
if to_stdout is True:
sys.stdout.writelines(result)
return result
@click.command()
@click.argument('content', required=False)
@click.option('--to_stdout', default=True)
def add_surname(content, to_stdout=False):
if not content:
content = ''.join(sys.stdin.readlines())
result = content + "\n\tadded surname"
if to_stdout is True:
sys.stdout.writelines(result)
return result
@click.command()
@click.argument('content', required=False)
@click.option('--to_stdout', default=False)
def add_name_and_surname(content, to_stdout=False):
result = add_surname(add_name(content))
if to_stdout is True:
sys.stdout.writelines(result)
return result
This way I am able to generate the three commands add_name
, add_surname
and add_name_and_surname
using a setup.py
file and pip install --editable .
然后我就可以管道了:
$ echo "original content" | add_name | add_surname
original content
added name
added surname
但是,在将不同的单击命令组合为函数时,我需要解决一个小问题:
$echo "original content" | add_name_and_surname
Usage: add_name_and_surname [OPTIONS] [CONTENT]
Error: Got unexpected extra arguments (r i g i n a l c o n t e n t
)
我不知道为什么它不起作用,我需要这个 add_name_and_surname
命令来调用 add_name
和 add_surname
作为我的原始函数失败使用函数作为库函数和命令的目的。
原文由 kaligne 发布,翻译遵循 CC BY-SA 4.0 许可协议
由于点击装饰器,函数不能再仅通过指定参数来调用。 Context 类是你的朋友,具体来说:
所以你的 add_name_and_surname 代码应该是这样的:
参考: http ://click.pocoo.org/6/advanced/#invoking-other-commands