是否可以使用argparse捕获任意一组可选参数? [英] Is it possible to use argparse to capture an arbitrary set of optional arguments?

查看:79
本文介绍了是否可以使用argparse捕获任意一组可选参数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Is it possible to use argparse to capture an arbitrary set of optional arguments?

例如,以下两项都应作为输入:

For example both the following should be accepted as inputs:

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

python script.py required_arg1 --varA valueA --var2 value2 --varB valueB

先验我不知道将指定接收哪些可选参数,但会相应地对其进行处理.

a priori I don't know what optional arguments would be specified receive but would handle them accordingly.

推荐答案

这是一种黑客手段,但效果很好:

This is kind of a hackish way, but it works well:

检查未添加的参数,然后添加它们

Check, which arguments are not added and add them

import argparse
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()

例如:

python3 arbitrary_parser.py ha -bar 12 -extra1 value1 -extra2 value2

那么结果将是

args = Namespace(bar=12, foo='ha', extra1='value1' extra2='value2')

这篇关于是否可以使用argparse捕获任意一组可选参数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆