2017-09-06 46 views
-2

我试图让argparser像在gdb的Python argparse后获得特定的标志所有参数列表

program.py --valid-arg1 value1 --valid-arg2 value2 --args binary --bin-arg1 bin_arg1_value --bin-arg2 bin_arg2_value... 

的问题是我需要的所有参数都--args就像值后,并让他们作为一个列表在我的程序里面。我怎样才能做到这一点?

谢谢

P.S.使用所有无法识别的参数,这是不好的解决方案,因为python和二进制参数可能具有相同的签名。

+1

你是说你要能够检索'args'为'[ '二进制', '--bin-ARG1', 'bin_arg1_value',“--bin -arg2','bin_arg2_value']'? –

+0

是的,这正是他想要的 – campovski

+0

@AlexHall是的,类似的东西 – brachistochron

回答

0

您是否尝试过使用sys.argv而不是​​?你可以做这样的事情,那么:

import sys 

dict = {} 
tmp = [] 
key = '' 
for arg in sys.argv: 
    if arg[0] == '-': 
     if tmp != []: 
      dict[key] = tmp 
      tmp = [] 
     key = arg 
     if key == '--args': 
      dict[key] = sys.argv[sys.argv.find(key)+1:] 
      break 
     continue 
    tmp.append(arg) 

这基本上构造带标志的按键和的参数列表来作为标志值的参数字典。你可能想检查一下sys.argv是什么。如果您有

python script.py -h yes -f yes no yes 

sys.argv调用你的Python脚本可能会['python', 'script.py', '-h', ...]但我离开那个给你找出来。那么,而不是for arg in sys.argv你想要做for arg in sys.argv[2:]或你想要的东西。


所以,如果我们所说的

program.py --valid-arg1 value1 --valid-arg2 value2 --args binary --bin-arg1 bin_arg1_value --bin-arg2 bin_arg2_value 

dict看起来就像这样:

dict = { 
    '--valid-arg1': ['value1'], 
    '--valid-arg2': ['value2'], 
    'args': ['binary', '--bin-arg1', 'bin_arg1_value', '--bin-arg2', 'bin_arg2_value'] 
} 

现在,如果你想使用什么是--valid-arg1值,你可以这样做

try: 
    if dict['--valid-arg1'] == some_value1: 
     ... 
    elif dict['--valid-arg1'] == some_value2: 
     ... 
except KeyError: 
    # no flag --valid-arg1 
    pass 

随着args你可以这样做

try: 
    if something in dict['args']: 
     ... 
except KeyError: 
    # no additional args were given 
    pass 
+0

我可以知道为什么和谁低估了这个?不要只是downvote,评论你为什么不喜欢它...... – campovski

+0

问题是关于argparse,比手动解析argv更容易使用,并且有许多有用的功能。 –

+0

@AlexHall更容易使用?现在让我看看你使用argparse来做这个人想要的东西... – campovski