单击带有可选参数的工具
Click tools with optional arguments
我想编写一个 CLI hello,它将 FILENAME 作为参数,除非给出选项 -s STRING,在这种情况下会直接处理 STRING。该程序应打印 hello {NAME}
,其中 name 是通过 STRING 给出的,或者是文件 FILENAME 的内容。
例子:
$ cat myname.txt
john
$ hello myname.txt
hello john
$ hello -s paul
hello paul
一个可能的解决方法是使用两个选项:
@click.command()
@click.option("-f", "--filename", type=str)
@click.option("-s", "--string", type=str)
def main(filename: str, string: str):
if filename:
...
if string:
....
但这意味着我必须用标志调用 hello
。
您可以使用点击 argument 并使其不再需要,例如:
import click
@click.command()
@click.argument('filename', required=False)
@click.option("-s", "--string")
def main(filename, string):
if None not in (filename, string):
raise click.ClickException('filename argument and option string are mutually exclusive!')
click.echo(f'Filename: {filename}')
click.echo(f'String: {string}')
我想编写一个 CLI hello,它将 FILENAME 作为参数,除非给出选项 -s STRING,在这种情况下会直接处理 STRING。该程序应打印 hello {NAME}
,其中 name 是通过 STRING 给出的,或者是文件 FILENAME 的内容。
例子:
$ cat myname.txt
john
$ hello myname.txt
hello john
$ hello -s paul
hello paul
一个可能的解决方法是使用两个选项:
@click.command()
@click.option("-f", "--filename", type=str)
@click.option("-s", "--string", type=str)
def main(filename: str, string: str):
if filename:
...
if string:
....
但这意味着我必须用标志调用 hello
。
您可以使用点击 argument 并使其不再需要,例如:
import click
@click.command()
@click.argument('filename', required=False)
@click.option("-s", "--string")
def main(filename, string):
if None not in (filename, string):
raise click.ClickException('filename argument and option string are mutually exclusive!')
click.echo(f'Filename: {filename}')
click.echo(f'String: {string}')