我想为我的选项显示argparse帮助,方法与默认-h
,--help
和-v
,--version
一样,没有ALLCAPS后的文字选项,或至少没有重复的CAPS。
import argparse
p = argparse.ArgumentParser("a foo bar dustup")
p.add_argument('-i', '--ini', help="use alternate ini file")
print '\n', p.parse_args()
这是我目前使用python foobar.py -h
获得的:
usage: a foo bar dustup [-h] [-i INI]
optional arguments:
-h, --help show this help message and exit
-i INI, --ini INI use alternate ini
这就是我想要的:
usage: a foo bar dustup [-h] [-i INI]
optional arguments:
-h, --help show this help message and exit
-i, --ini INI use alternate ini
这也是可以接受的:
-i, --ini use alternate ini
我正在使用python 2.7。
答案 0 :(得分:15)
您可以自定义usage
并将metavar
分配给空字符串:
import argparse
p = argparse.ArgumentParser("a foo bar dustup", usage='%(prog)s [-h] [-i INI]')
p.add_argument('-i', '--ini', help="use alternate ini file", metavar='')
p.print_help()
usage: a foo bar dustup [-h] [-i INI] optional arguments: -h, --help show this help message and exit -i , --ini use alternate ini file
答案 1 :(得分:4)
我可以告诉你有两种选择,
import argparse
p = argparse.ArgumentParser(description="a foo bar dustup")
p.add_argument('-i', '--ini', metavar='', help="use alternate ini file")
print '\n', p.parse_args()
或者您可以编写自定义formatter class,我意识到第一个选项可能不是一个完美的解决方案,因为它消除了使用行中的CAPS。如果重要的是argparse的source,我可以告诉默认的格式化程序类不能完全按照你想要的那样完成。
编辑:
好吧,我继续为你构建了自己的格式化程序类,与其他程序一样......不确定我是否建议你在生产代码中使用它,因为它不会有任何正式的python文档= p
import argparse
from argparse import HelpFormatter
class MyFormatter(HelpFormatter):
"""
for matt wilkie on SO
"""
def _format_action_invocation(self, action):
if not action.option_strings:
default = self._get_default_metavar_for_positional(action)
metavar, = self._metavar_formatter(action, default)(1)
return metavar
else:
parts = []
# if the Optional doesn't take a value, format is:
# -s, --long
if action.nargs == 0:
parts.extend(action.option_strings)
# if the Optional takes a value, format is:
# -s ARGS, --long ARGS
else:
default = self._get_default_metavar_for_optional(action)
args_string = self._format_args(action, default)
for option_string in action.option_strings:
parts.append(option_string)
return '%s %s' % (', '.join(parts), args_string)
return ', '.join(parts)
def _get_default_metavar_for_optional(self, action):
return action.dest.upper()
p = argparse.ArgumentParser("a foo bar dustup", formatter_class=MyFormatter)
p.add_argument('-i', '--ini', help="use alternate ini file")
p.print_help()