我无法弄清楚如何从cli传递* args和** kwargs到python脚本。* args似乎包括** kwargs条目,就像我做的那样。我是否应该找出多少个kwarg,然后从* args中减去该数字以确定哪些参数是args?
我可以通过从脚本内部传递给函数来做到这一点,但是如果我想从cli中传递参数,我如何确定哪些参数用于* args,哪些参数用于** kwargs?
这有效:
def Func(*args,**kwargs):
for arg in args:
print arg
for item in kwargs.items():
print item
print Func(1,2,3,x=7,u=8)
但是我想要这样的东西:
def Func(*args,**kwargs):
for arg in args:
print arg
for item in kwargs.items():
print item
print Func(sys.argv[1], sys.argv[2], sys.argv[3:])
这就是我得到的:
$ ./test.py 1 2 3 4 x=7 u=8
1
2
['3', '4', 'x=7', 'u=8']
None
但是我想更进一步一点:
$ ./test.py 1 2 3 4 x=7 u=8
1
2
['3', '4']
{'x': '7', 'u': '8'}
或者这个:
$ ./test.py 1 2 3 4 x=7 u=8
1
2
3
4
('x', 7)
('u', 8)
任何帮助将不胜感激!
答案 0 :(得分:0)
如上面@kingforever的评论中所述,使用argparse模块将更加简洁和安全(检查强制性参数,参数有效性等)。
无论如何,您要求的一种可能的轻量级快速解决方案是:
args = [x for x in sys.argv if '=' not in x]
kwargs = {x.split('=')[0]: x.split('=')[1] for x in sys.argv if '=' in x}
print Func(*args, **kwargs)