是否有优雅的解决方案将shell参数映射到Python函数参数?

时间:2017-05-17 23:58:12

标签: python

想象一下有这个Python函数:

def frobnicate(foo, bar, buzz, *, quux, quuz=42, corge=None):
    pass

我有一个转换器,可以通过这种方式从shell调用这个函数:

$ ./frobnicate.py 'I am foo' 'This is bar' --quux="Quux here" --buzz="Buzz value"

因此,规则类似于Python调用语法约定 - 位置参数首先出现,然后关键字参数可以按任意顺序进行。

问题是 - 如何允许以双击(--)开头的位置参数?例如。如果我想让foo等于--nonsense=1234,如果不强制foo始终指定为关键字参数,我怎么能这样做?在没有违背这个想法的情况下,有没有更多或更少的美好方法呢?

1 个答案:

答案 0 :(得分:3)

传统上,选项将在shell中的位置参数之前进行,如果您需要看起来像选项的位置参数,则裸--将标记选项的明确结束和位置参数的开始:

./frobnicate.py --quux="Quux here" --buzz="Buzz value" -- --nonsense=1234 bar