我的问题类似于argparse help without duplicate ALLCAPS问题。
虽然我会简要解释一下这个问题是什么,我的问题是什么:
我希望以与默认-h,--help
相同的方式显示我的选项的argparse帮助,在每个选项后没有ALLCAPS文本,或者至少没有重复的CAPS。
例如,使用以下代码:
#filename=temp.py
import argparse
p = argparse.ArgumentParser()
p.add_argument('-i', '--ini', help="use alternate ini file")
print '\n', p.parse_args()
现在正在运行python temp.py -h
:
usage: temp.py [-h] [-i INI]
optional arguments:
-h, --help show this help message and exit
-i INI, --ini INI use alternate ini file
现在我想要的是:
usage: 123.py [-h] [-i INI]
optional arguments:
-h, --help show this help message and exit
-i, --ini INI use alternate ini file
OR
usage: 123.py [-h] [-i INI]
optional arguments:
-h, --help show this help message and exit
-i, --ini use alternate ini file
要获得第二个,可以将行metavar
中的默认p.add_argument
更改为:
p.add_argument('-i', '--ini', help="use alternate ini file")
并更改argparse.ArgumentParser()
中的默认用法声明。
但是当我的代码中可选参数的数量增加时,我发现很难根据代码中的修改添加和删除参数来修改用法消息。
在不影响使用陈述的情况下,是否有其他方法可以解决metavar
的问题。
如果我希望显示我的帮助,如第一种情况所示,INI
之后只有一次-i, --ini
。
如果我在显示-i, --ini INI
或-i, --ini
而非-i INI, --ini INI
的帮助时出错,请以正当理由纠正我。 (我的意思是错误,我使用的惯例会导致用户混淆或误解)
答案 0 :(得分:1)
https://stackoverflow.com/a/9643162/901925 和 https://stackoverflow.com/a/23941599/901925 和 https://stackoverflow.com/a/16969505/901925
进行HelpFormatter._format_action_invocation(self, action)
方法修改,将'-i INI, --ini INI'
替换为'-i, --ini INI'
。
'-h, --help'
没有CAPS字符串,因为帮助没有参数。 INI
只是该论点的占位符。原版只是试图清楚,您可以使用-i 124
或--ini 124
METAVAR
参数可让您控制该占位符,但它用于格式化用法和帮助。
如果您不想使用自定义HelpFormatter类路由,您仍然可以使用自定义使用方法。例如,在开发期间的某个时刻,执行usage = parser.format_usage()
。现在更改解析器,使metavar
为''
,使用情况就是新的。
parser = argparse.ArgumentParser()
a1 = parser.add_argument('-f','--foo',help='<foo> argument')
a2 = parser.add_argument('-b','--bar',metavar='CUSTOM',help='<CUSTOM> argunent')
a3 = parser.add_argument('-z','--baz', action='store_true', help='no argument')
usage = parser.format_usage()
parser.usage=usage # grab original usage
for a in [a1,a2]:
a.metavar='' # 'blank' out the metavars that matter
parser.print_help()
产生
usage: usage: stack30704631.py [-h] [-f FOO] [-b CUSTOM] [-z]
optional arguments:
-h, --help show this help message and exit
-f , --foo <foo> argument
-b , --bar <CUSTOM> argunent
-z, --baz no argument
答案 1 :(得分:1)
对于快速解决方案,您只需将退格符设置为metavar即可。
p.add_argument('-i', '--ini', help="use alternate ini file", metavar='\b')
它会告诉你:
optional arguments:
-h, --help show this help message and exit
如果你想要这个:
-i, --ini INI use alternate ini file
您必须修改帮助格式化程序。这里回答python argparse help message, disable metavar for short options?