我使用的是python-click,我想以这样的格式传递值
myprogram mycommand --parameter param1=value1 --parameter param2=value2我正在查看click option documentation,但我找不到任何可以帮助实现这一点的构造,我能找到的唯一解决方案是调用callback函数,检查字符串是否被正确构造为<key>=<value>,然后适当地详细说明这些值。
该解决方案没有什么不好的地方,但我想知道是否有更优雅的方法来处理这一问题,因为该模式看起来足够常见。
发布于 2020-04-02 06:31:14
所以,我已经尝试过了。我已经通过以下方式做到了这一点。
首先,我尝试过这个方法,尽管它不符合--parameter标准。
@click.command("test")
@click.argument("args", nargs=-1)
def test(args):
args = dict([arg.split("=") for arg in args])
print(args)因此,当像test param1=test1 param2=test一样调用时,输出是:
{'param1': 'test1', 'param2': 'test2' }其次,我考虑了一个多选项,并结合了一个可变参数,它似乎更接近您的需求:test -p param1=test -p param2=test
@click.command("test")
@click.option('-p', '--parameter', multiple=True)
@click.argument("args", nargs=-1)
def test(*args, **kwargs):
param_args = kwargs['parameter']
param_args = dict([p.split('=') for p in param_args])
print(param_args)
if __name__ == '__main__':
test()输出将与前面的情况相同。
如果你去print(kwargs['parameter']),你会得到
('param1=test', 'param2=test')这听起来比使用回调更简洁一些,但也不会太多。尽管如此,希望它能有所帮助。
https://stackoverflow.com/questions/60930422
复制相似问题