是否可以使用argparse捕获任意一组可选参数?

sal*_*adi 21 python argparse

是否可以使用argparse捕获任意一组可选参数?

例如,以下两者都应被接受为输入:

python script.py required_arg1 --var1 value1 --var2 value2 --var3 value3

python script.py required_arg1 --varA valueA --var2 value2 --varB valueB
Run Code Online (Sandbox Code Playgroud)

先验我不知道将指定哪些可选参数接收但会相应地处理它们.

MrP*_*P01 34

这是一种hackish方式,但它运作良好:

检查,未添加哪些参数并添加它们

parser=argparse.ArgumentParser()
parser.add_argument("foo")
parser.add_argument("-bar", type=int)
#parser can have any arguments, whatever you want!

parsed, unknown = parser.parse_known_args() #this is an 'internal' method
# which returns 'parsed', the same as what parse_args() would return
# and 'unknown', the remainder of that
# the difference to parse_args() is that it does not exit when it finds redundant arguments

for arg in unknown:
    if arg.startswith(("-", "--")):
        #you can pass any arguments to add_argument
        parser.add_argument(arg, type=<your type>, ...)

args=parser.parse_args()
Run Code Online (Sandbox Code Playgroud)

例如:

python arbitrary_parser.py ha -bar 12 -lol huhu -rofl haha
Run Code Online (Sandbox Code Playgroud)

那么结果就是

args = Namespace(bar=12, foo='ha', lol='huhu', rofl='haha')
Run Code Online (Sandbox Code Playgroud)

  • 之前的一个答案使用了`parse_known_args`,但后来使用了`sys.argv`解析`unknown`的样式.我喜欢你将这些标志添加到解析器并重新解析的想法.Hackish要求需要hackish解决方案.:) (3认同)