首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python单击将多个键值作为选项进行传递

python单击将多个键值作为选项进行传递
EN

Stack Overflow用户
提问于 2020-03-30 20:20:34
回答 1查看 501关注 0票数 0

我使用的是python-click,我想以这样的格式传递值

代码语言:javascript
复制
myprogram mycommand --parameter param1=value1 --parameter param2=value2

我正在查看click option documentation,但我找不到任何可以帮助实现这一点的构造,我能找到的唯一解决方案是调用callback函数,检查字符串是否被正确构造为<key>=<value>,然后适当地详细说明这些值。

该解决方案没有什么不好的地方,但我想知道是否有更优雅的方法来处理这一问题,因为该模式看起来足够常见。

EN

回答 1

Stack Overflow用户

发布于 2020-04-02 06:31:14

所以,我已经尝试过了。我已经通过以下方式做到了这一点。

首先,我尝试过这个方法,尽管它不符合--parameter标准。

代码语言:javascript
复制
@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一样调用时,输出是:

代码语言:javascript
复制
{'param1': 'test1', 'param2': 'test2' }

其次,我考虑了一个多选项,并结合了一个可变参数,它似乎更接近您的需求:test -p param1=test -p param2=test

代码语言:javascript
复制
@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']),你会得到

代码语言:javascript
复制
('param1=test', 'param2=test')

这听起来比使用回调更简洁一些,但也不会太多。尽管如此,希望它能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60930422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档