我正在尝试像gdb一样制作argparser
program.py --valid-arg1 value1 --valid-arg2 value2 --args binary --bin-arg1 bin_arg1_value --bin-arg2 bin_arg2_value...
问题是我需要将--args
之后的所有参数视为值,并将它们作为程序中的列表。我怎么能这样做?
由于
P.S。使用所有无法识别的参数这是不好的解决方案,因为python和二进制args可能具有相同的签名。
答案 0 :(得分:0)
您是否尝试过使用sys.argv
代替argparse
?你可以做那样的事情:
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)
这基本上构造了一个参数字典,其中flags作为键,Flag作为值的参数列表。您可能想要查看sys.argv
是什么。如果使用
python script.py -h yes -f yes no yes
sys.argv
可能是['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