带有python单击库选项的可选CLI参数
在解析某些CLI选项时,我遇到了Python库的难题 我希望有一个选项本身充当标志,但可以选择接受字符串值。例如:带有python单击库选项的可选CLI参数,python,click,command-line-interface,Python,Click,Command Line Interface,在解析某些CLI选项时,我遇到了Python库的难题 我希望有一个选项本身充当标志,但可以选择接受字符串值。例如: $myscript⇒ 选项=False $myscript-o⇒ 选项=真 $myscript-o foobar⇒ 选项=Foobar 此外,我希望选项是“渴望”(例如,在“单击”术语中,回调后中止执行),但现在可以忽略此选项 当我这样定义参数时: @click.command() @click... @click.option("-o", "option", is_flag=T
$myscript
⇒ 选项=False$myscript-o
⇒ 选项=真$myscript-o foobar
⇒ 选项=Foobar当我这样定义参数时:
@click.command()
@click...
@click.option("-o", "option", is_flag=True, default=False)
def myscript(..., option):
@click.command()
@click...
@click.option("-o", "--option", default="") # Let's assume I will cast empty string to False
def myscript(..., option):
我实现了示例1和2,但是3自然是不可能的,因为标志只检测存在/不存在
当我这样定义参数时:
@click.command()
@click...
@click.option("-o", "option", is_flag=True, default=False)
def myscript(..., option):
@click.command()
@click...
@click.option("-o", "--option", default="") # Let's assume I will cast empty string to False
def myscript(..., option):
我实现了1和3,但2将失败并出现错误:-c选项需要一个参数
这看起来不像是一个出类拔萃的场景,但我似乎无法实现这一点,也找不到这样的例子
如何定义一个解析如下的@click.option
False
未设置时
True
设置但无值时
str
设置值时
我实现这种行为的一种方法是实际使用如下参数。我将把这篇文章作为一个解决方法发布,同时我尝试看看是否可以通过一个选项来完成,我将相应地更新我的文章
@click.command(上下文设置={“忽略未知选项”:True})
@参数(“选项”,nargs=-1)
def myscript(选项):
选项=False
如果选项为():
选项=False
如果选项中的“-o”或选项中的“---option”:
选项=真
如果len(选项)>1:
选项=选项[1]
打印(可选)
以后编辑
通过使用一个选项,我成功地通过向命令定义添加一个参数来实现这一点
@click.command()
@click.option('-o','-option',is_flag=True,default=False,is_eager=True)
@click.argument('value',nargs=-1)
def myscript(选项,值):
如果选项和值!=():
选项=值[0]
打印(可选)
如果您最多只希望跟随一个参数,则可以删除nargs
,并且可以将其视为不需要
@click.command()
@click.option('-o','-option',is_flag=True,default=False,is_eager=True)
@click.argument('value',required=False)
def myscript(选项,值=None):
如果选项和值不是“无”:
选项=值
打印(可选)
也可以通过组合一个上下文生成器并存储一些状态来实现,但这似乎是最不理想的解决方案,因为您将依赖上下文来存储您的状态。除非您的CLI只接受-o,否则我不确定您能否实现您的请求。例如,如果您的CLI是myscript-o REQUIRED_PARAM,您如何知道您提供的是-o OPTION_值还是REQUIRED_PARAM值?很遗憾,不是这样,因为状态:对于选项,只支持固定数量的参数。所以你不能同时满足(2)和(3)。另一方面,Python将通过nargs='*'
:解析器来支持您的需求。添加参数('-o',nargs='*')
。谢谢!我不知道你可以在最后和选项之后添加一个参数;与相结合是非常渴望的
,这没有问题,我可以简单地检查决策树中是否设置了var。很高兴我能提供帮助!