如何从命令行将*args和**kwargs同时传递给python脚本

如何从命令行将*args和**kwargs同时传递给python脚本,python,command-line,arguments,Python,Command Line,Arguments,我不知道如何从cli将*args和**kwargs都传递给python脚本。*args似乎包括**kwargs条目,就像我这样做的。我是不是应该计算出有多少**kwarg,然后从*arg中减去这个数字来确定哪些参数是arg 我可以通过从脚本中传递到函数来实现这一点,但是如果我想从cli中传递参数,如何识别哪些参数用于*args,哪些参数用于**kwargs 这项工作: def Func(*args,**kwargs): for arg in args: print ar

我不知道如何从cli将*args和**kwargs都传递给python脚本。*args似乎包括**kwargs条目,就像我这样做的。我是不是应该计算出有多少**kwarg,然后从*arg中减去这个数字来确定哪些参数是arg

我可以通过从脚本中传递到函数来实现这一点,但是如果我想从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)

任何帮助都将不胜感激

正如@kingfever在上面的评论中所说,使用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)                                                      

退房这是一个很好的使用命令行参数的库。谢谢。我将更详细地检查这一点,但这似乎是一个有点过分为我所需要的。你是说我不能用sys.argv自己做我想做的事吗?谢谢。是的,我现在明白了。另一个可行的解决方案是传入一个带有逗号分隔值的字符串,用sys、argv[3]获取它,然后将这些值拆分出来。这被认为是可以接受的还是愚蠢的?!