【发布时间】:2017-02-26 17:31:18
【问题描述】:
我想使用一些有用的功能作为命令。为此,我正在测试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
通过这种方式,我可以使用setup.py 文件和pip install --editable . 生成三个命令add_name、add_surname 和add_name_and_surname,然后我就可以进行管道传输了:
$ 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 不是作为命令而是作为函数,否则它违背了我使用函数作为库函数和命令。
【问题讨论】:
标签: python command-line-arguments stdout piping python-click