我正在使用 Python 创建一个命令行应用程序Click http://click.pocoo.org/接受名称作为输入的库,但如果未输入名称,则返回默认值。
这是我到目前为止的代码。
hello.py
import click
@click.version_option(1.0)
@click.command()
@click.argument('string', default='World')
@click.option('-r', '--repeat', default=1, help='How many times should be greeted.')
def cli(string,repeat):
'''This string greets you.'''
for i in xrange(repeat):
click.echo('Hello %s!' % string)
if __name__ == '__main__':
cli()
当我运行它时。
$ hello
Hello World!
$你好鲍勃
Hello Bob!
$你好鲍勃-r 3
Hello Bob!
Hello Bob!
Hello Bob!
这正是我想要的。
现在,我希望能够接受来自标准输入的输入,如下例所示。
$ 回声约翰 |你好
Hello John!
$ 回声约翰 |你好-r 3
Hello John!
Hello John!
Hello John!
嗯,这是一个相当老的问题,但无论如何我都会尝试回答它。
我对 Click 还算陌生,所以我认为我的解决方案可以得到极大的改进。无论如何,它完全符合您的要求。这里是:
import click
def get_name(ctx, param, value):
if not value and not click.get_text_stream('stdin').isatty():
return click.get_text_stream('stdin').read().strip()
else:
return value
@click.command()
@click.argument('name', callback=get_name, required=False)
@click.option('--repeat', '-r', default=1)
def say_hello(name, repeat):
for i in range(repeat):
click.echo('Hello {}'.format(name or 'World'))
if __name__ == "__main__":
say_hello()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)