Python argparse 中的手动命令规范
Manual command specification in Python argparse
一个例子会更好,考虑这个愚蠢的例子:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-f', '--foo', nargs='+', help='Spam egg')
parser.parse_args()
当我运行 ---help
:
usage: foos.py [-h] [-f FOO [FOO ...]]
optional arguments:
-h, --help show this help message and exit
-f FOO [FOO ...], --foo FOO [FOO ...]
Spam egg
因为我使用了 nargs ='+'
,所以我得到 -f FOO [FOO ...]
和类似的 -foo FOO [FOO ...]
,但我只想在 [=19= 中显示一个 FOO
] 即我想要:
usage: foos.py [-h] [-f FOO]
optional arguments:
-h, --help show this help message and exit
-f FOO, --foo FOO
Spam egg
我查看了 argparse doc 但找不到任何类似的内容。我该怎么做?
您可以实现自己的格式化程序:
import argparse
class MyFormatter(argparse.HelpFormatter):
def _format_args(self, action, default_metavar):
get_metavar = self._metavar_formatter(action, default_metavar)
if action.nargs is None:
result = '%s' % get_metavar(1)
elif action.nargs == argparse.OPTIONAL:
result = '[%s]' % get_metavar(1)
elif action.nargs == argparse.ZERO_OR_MORE:
result = '[%s [%s ...]]' % get_metavar(2)
#let's customize this part
elif action.nargs == argparse.ONE_OR_MORE:
#result = '%s [%s ...]' % get_metavar(2)
result = '%s' % get_metavar(1)
elif action.nargs == argparse.REMAINDER:
result = '...'
elif action.nargs == argparse.PARSER:
result = '%s ...' % get_metavar(1)
else:
formats = ['%s' for _ in range(action.nargs)]
result = ' '.join(formats) % get_metavar(action.nargs)
return result
parser = argparse.ArgumentParser(formatter_class = MyFormatter)
parser.add_argument('-f', '--foo', nargs='+', help='Spam egg')
parser.parse_args()
这会给出:
usage: test.py [-h] [-f FOO]
optional arguments:
-h, --help show this help message and exit
-f FOO, --foo FOO Spam egg
一个例子会更好,考虑这个愚蠢的例子:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-f', '--foo', nargs='+', help='Spam egg')
parser.parse_args()
当我运行 ---help
:
usage: foos.py [-h] [-f FOO [FOO ...]]
optional arguments:
-h, --help show this help message and exit
-f FOO [FOO ...], --foo FOO [FOO ...]
Spam egg
因为我使用了 nargs ='+'
,所以我得到 -f FOO [FOO ...]
和类似的 -foo FOO [FOO ...]
,但我只想在 [=19= 中显示一个 FOO
] 即我想要:
usage: foos.py [-h] [-f FOO]
optional arguments:
-h, --help show this help message and exit
-f FOO, --foo FOO
Spam egg
我查看了 argparse doc 但找不到任何类似的内容。我该怎么做?
您可以实现自己的格式化程序:
import argparse
class MyFormatter(argparse.HelpFormatter):
def _format_args(self, action, default_metavar):
get_metavar = self._metavar_formatter(action, default_metavar)
if action.nargs is None:
result = '%s' % get_metavar(1)
elif action.nargs == argparse.OPTIONAL:
result = '[%s]' % get_metavar(1)
elif action.nargs == argparse.ZERO_OR_MORE:
result = '[%s [%s ...]]' % get_metavar(2)
#let's customize this part
elif action.nargs == argparse.ONE_OR_MORE:
#result = '%s [%s ...]' % get_metavar(2)
result = '%s' % get_metavar(1)
elif action.nargs == argparse.REMAINDER:
result = '...'
elif action.nargs == argparse.PARSER:
result = '%s ...' % get_metavar(1)
else:
formats = ['%s' for _ in range(action.nargs)]
result = ' '.join(formats) % get_metavar(action.nargs)
return result
parser = argparse.ArgumentParser(formatter_class = MyFormatter)
parser.add_argument('-f', '--foo', nargs='+', help='Spam egg')
parser.parse_args()
这会给出:
usage: test.py [-h] [-f FOO]
optional arguments:
-h, --help show this help message and exit
-f FOO, --foo FOO Spam egg