Python argparse可选参数和位置参数之间的大小写不一致

Python argparse可选参数和位置参数之间的大小写不一致,python,argparse,Python,Argparse,我想知道为什么Python的argparse中可选参数和位置参数的大小写转换不一致。将'--optional argument'添加到解析器将被命名为'optional\u argument',但位置参数将保持为位置参数 import argparse parser = argparse.ArgumentParser() parser.add_argument('positional-argument') parser.add_argument('--optional-argument') ar

我想知道为什么Python的
argparse
中可选参数和位置参数的大小写转换不一致。将
'--optional argument'
添加到解析器将被命名为
'optional\u argument'
,但位置参数将保持为
位置参数

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('positional-argument')
parser.add_argument('--optional-argument')
arg_dict = vars(parser.parse_args('Positional --optional-argument Optional'.split()))
print(arg_dict)
# {'positional-argument': 'Positional', 'optional_argument': 'Optional'}
我可以改变向解析器添加位置参数的方式,但不一致性仍然存在(尽管在不同的位置)


看来这是一个已知的问题

建议的解决办法:

  • 如果使用
    'positional-argument'
    ,则可以使用
    getattr()
    从命名空间中提取它

  • 如果使用
    “位置参数”
    ,可以使用
    metavar='positional-argument'
    更改它在帮助输出中的显示方式


破折号替换允许您使用
参数访问值。可选的\u参数
(使用有效的Python属性名称)。您通常可以更自由地选择位置
dest
。如果您使用
metavar
,您的用户甚至看不到
帮助中的
dest
parser.add_argument('positional_argument')
parser.add_argument('--optional-argument')
# {'positional_argument': 'Positional', 'optional_argument': 'Optional'}