我想使用一些有用的功能作为命令。为此,我正在测试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
这样我就可以生成三个命令add_name
,add_surname
并add_name_and_surname
使用一个setup.py
文件,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
不是作为命令而是作为函数调用,否则它违背了我将函数用作库函数和命令的最初目的。