Python 有没有办法按照argparse的定义顺序获取参数?
我想打印程序的所有选项,并将它们分组以便于阅读。但是,通过Python 有没有办法按照argparse的定义顺序获取参数?,python,argparse,Python,Argparse,我想打印程序的所有选项,并将它们分组以便于阅读。但是,通过vars(args)访问参数时,顺序是随机的。argparse解析sys.argv[1://code>中的参数列表(sys.argv[0]用作用法中的prog值) args=parser.parse_args()返回一个argparse.Namespace对象vars(args)返回基于此对象的字典(args.\uuuu dict\uuu)。字典的键是无序的打印(args)也使用此字典顺序 解析器保存所看到的动作的记录,以用于自己的簿记目
vars(args)
访问参数时,顺序是随机的。argparse
解析sys.argv[1://code>中的参数列表(sys.argv[0]
用作用法中的prog
值)
args=parser.parse_args()
返回一个argparse.Namespace
对象vars(args)
返回基于此对象的字典(args.\uuuu dict\uuu
)。字典的键是无序的<代码>打印(args)
也使用此字典顺序
解析器保存所看到的动作的记录,以用于自己的簿记目的。但是它不向用户公开,并且是一个无序的集合
。我可以想象定义一个自定义的Action
子类来记录其实例的使用顺序
可以按照创建解析器时定义的顺序检索参数。这是因为解析器
有一个所有操作的\u actions
列表。它不是公共API的一部分,而是一个基本属性,不太可能会消失
举例说明:
In [622]: parser=argparse.ArgumentParser()
In [623]: parser.add_argument('foo')
In [624]: parser.add_argument('--bar')
In [625]: parser.add_argument('--baz')
In [626]: parser.print_help()
usage: ipython3 [-h] [--bar BAR] [--baz BAZ] foo
positional arguments:
foo
optional arguments:
-h, --help show this help message and exit
--bar BAR
--baz BAZ
用法和帮助列表按定义的顺序显示参数,但位置
和选项
是分开的
In [627]: args=parser.parse_args(['--bar','one','foobar'])
In [628]: args
Out[628]: Namespace(bar='one', baz=None, foo='foobar')
In [629]: vars(args)
Out[629]: {'bar': 'one', 'baz': None, 'foo': 'foobar'}
In [631]: [(action.dest, getattr(args,action.dest, '***')) for action in parser._actions]
Out[631]: [('help', '***'), ('foo', 'foobar'), ('bar', 'one'), ('baz', None)]
在这里,我迭代\u actions
列表,为每个Action
获取dest
,并从args
命名空间中获取该值。我也可以从vars(args)
字典中获取它
我必须给getattr
一个默认值***
,因为帮助
操作没有出现在名称空间中。我本可以从显示器上过滤掉这类操作。考虑到argparse和其他类似的东西都是为了符合POSIX标准而设计的,它们指定的顺序并不重要,我真的怀疑它。您可能可以使用sys.argv
来执行此操作,但是它们不会被解析。您是否对命令行中参数的显示顺序感兴趣,或者对使用add_argument
创建参数的顺序感兴趣?