Python 单击带有可选参数的工具

Python 单击带有可选参数的工具,python,command-line-interface,python-click,Python,Command Line Interface,Python Click,我想编写一个CLI hello,它将文件名作为参数,除非给出了选项-s STRING,在这种情况下,直接处理字符串。程序应打印hello{NAME},其中名称通过字符串给出或作为文件名的内容 例如: 一种可能的解决方法是使用两个选项: @click.command() @单击.option(“-f”,“-filename”,type=str) @单击.option(“-s”,“-string”,type=str) def main(文件名:str,字符串:str): 如果文件名为: ... 如果

我想编写一个CLI hello,它将文件名作为参数,除非给出了选项-s STRING,在这种情况下,直接处理字符串。程序应打印
hello{NAME}
,其中名称通过字符串给出或作为文件名的内容

例如:

一种可能的解决方法是使用两个选项:

@click.command()
@单击.option(“-f”,“-filename”,type=str)
@单击.option(“-s”,“-string”,type=str)
def main(文件名:str,字符串:str):
如果文件名为:
...
如果字符串:
....
但这意味着我必须使用一个标志来调用
hello

您可以使用单击,使其不需要,如:

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}')

需要澄清的快速问题:在给定的情况下,两个选项都可以使用
参数
,对吗?@self直到现在我才发现我误解了你的建议。我认为
参数('some')
将是
选项('-s','-some',tyle=str)
的快捷方式:当然,不是两者都可以成为可选参数!也许简短的介绍对于刚刚接触Click API的人来说太短了。。。代码中显示的方法导致了良好的CLI。
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}')