我想在解析选项时将索引记录到sys.argv列表中
我试图用python脚本包装另一个程序。 在包装器脚本中,我试图解析与脚本无关的选项 并从argv列表中删除它们,以便我可以将其余参数传递给被包装的程序。
为此,我使用parser.parse_known_args(),这样我就不必跟踪程序可能支持的每个参数。只是与包装器有关的那些。
现在,如果解析记录了需要删除的参数索引 我可以在解析后删除它们并将剩余的args传递给包装程序。
如何在解析过程中记录此信息?
并非所有对包装器有意义的参数都应该被删除。所以我需要有选择性
答案 0 :(得分:1)
我不熟悉parser.parse_known_args()。我使用的是Python 2.7,没有这样的功能。你可以做的是将原始的sys.argv保存在例如arg_list中并执行
indices = [arg_list.index(a)for a selected_arguments]
这将返回所选参数的索引列表(位置)
答案 1 :(得分:1)
parse.parse_known_args
返回2个值,包含它所知道的namespace
参数,以及它无法处理的字符串列表。我认为rest
列表是您想要传递给其他程序的。
换句话说:
[args1, rest] = parser1.parse_known_args() # or (sys.argv[1:])
args = parser2.parse_args(rest)
如果你不能给parser2
一个明确的参数列表(例如它被编码为parse_args()
),那么你需要这样做:
sys.argv[1:] = rest
我再次看了argparse
,_parse_known_args
的内部。它遍历参数字符串几次。使用字符串的循环使用while start_index<max_index:
。 start_index
根据每个参数的nargs
的不同而增加。实际上,它确实指向用于特定参数的第一个字符串(例如-f
标志)。但它的值不会给action
函数(您可以自定义)。也没有记录在任何地方。无法处理的字符串将添加到extras
列表中。这是parse_known_args
返回的第二个值。