给某事。喜欢(或类似):
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("FILES", nargs="+", type=str)
args = parser.parse_args()
现在,我想在使用情况消息中将多值位置参数FILES
显示为
usage: cli.py [-h] FILES
代替
usage: cli.py [-h] FILES [FILES ...]
任何分步说明或指示都值得赞赏。
答案 0 :(得分:4)
这是默认格式化程序source的内置行为。
您可以对自己的自定义格式化程序进行nargs="+"
类型参数的特殊处理:
import argparse
class CustomFormatter(argparse.HelpFormatter):
def _format_args(self, action, default_metavar):
get_metavar = self._metavar_formatter(action, default_metavar)
if action.nargs == argparse.ONE_OR_MORE:
return '%s' % get_metavar(1)
else:
return super(CustomFormatter, self)._format_args(action, default_metavar)
parser = argparse.ArgumentParser(formatter_class=CustomFormatter)
parser.add_argument("FILES", nargs="+", type=str)
args = parser.parse_args()
将打印出
usage: cli.py [-h] FILES
cli.py: error: the following arguments are required: FILES
答案 1 :(得分:1)
fbahr,我刚刚决定跳入source code of argparse。我发现用法的格式是硬编码的look at it here。覆盖它的唯一方法是继承自HelpFormatter (创建新ArgumentParser实例时使用的默认类),并告诉解析器使用您创建的类,使用您自己的格式化程序。您将必须覆盖一个名为“ _format_args ”的“私有”方法(以下划线作为前缀),这有点丑陋和反模式(事实上,这是唯一的原因)之所以可以这样做,是因为我们使用的是Python),但这似乎是您要自定义argparse的唯一方法。
import argparse
class NArgsCustomUsageHelpFormatter(argparse.HelpFormatter):
def _format_args(self, action, default_metavar):
get_metavar = self._metavar_formatter(action, default_metavar)
if action.nargs == argparse.ONE_OR_MORE:
result = '%s' % get_metavar(1)
else:
result = argparse.HelpFormatter._format_args(self, action, default_metavar)
return result
parser = argparse.ArgumentParser(formatter_class=NArgsCustomUsageHelpFormatter)
parser.add_argument("FILES", nargs="+", type=str)
args = parser.parse_args()
如果要格式化的动作至少需要一个参数(nargs='+'
),那么上面的代码只是更改了默认行为,否则它没有任何不同。
希望对您有帮助!