import argparse
parser = argparse.ArgumentParser(prog='tool')
args = [('-u', '--upf', 'ref. upf', dict(required='True')),
('-s', '--skew', 'ref. skew', {}),
('-m', '--model', 'ref. model', {})]
for args1, args2, desc, options in args:
parser.add_argument(args1, args2, help=desc, **options)
parser.print_help()
Run Code Online (Sandbox Code Playgroud)
输出:
usage: capcheck [-h] -u UPF [-s SKEW] [-m MODEL]
optional arguments:
-h, --help show this help message and exit
-u UPF, --upf UPF ref. upf
-s SKEW, --skew SKEW ref. skew
-m MODEL, --model MODEL
ref. model
Run Code Online (Sandbox Code Playgroud)
我如何打印参考.-m MODEL, --model MODEL当我使用-h选项运行脚本时,模型在同一行而不是出现在单独的行上?
jfs*_*jfs 28
你可以提供formatter_class参数:
parser = argparse.ArgumentParser(prog='tool',
formatter_class=lambda prog: argparse.HelpFormatter(prog,max_help_position=27))
args = [('-u', '--upf', 'ref. upf', dict(required='True')),
('-s', '--skew', 'ref. skew', {}),
('-m', '--model', 'ref. model', {})]
for args1, args2, desc, options in args:
parser.add_argument(args1, args2, help=desc, **options)
parser.print_help()
Run Code Online (Sandbox Code Playgroud)
注意:执行argparse.HelpFormatter是私有的,只有名称是公共的.因此,代码可能会在以后的版本中停止工作argparse.提交功能请求,以便max_help_position在http://bugs.python.org/上为自定义提供公共接口
usage: tool [-h] -u UPF [-s SKEW] [-m MODEL]
optional arguments:
-h, --help show this help message and exit
-u UPF, --upf UPF ref. upf
-s SKEW, --skew SKEW ref. skew
-m MODEL, --model MODEL ref. model
Run Code Online (Sandbox Code Playgroud)
受到@jfs答案的启发,我想出了这个解决方案:
def make_wide(formatter, w=120, h=36):
"""Return a wider HelpFormatter, if possible."""
try:
# https://stackoverflow.com/a/5464440
# beware: "Only the name of this class is considered a public API."
kwargs = {'width': w, 'max_help_position': h}
formatter(None, **kwargs)
return lambda prog: formatter(prog, **kwargs)
except TypeError:
warnings.warn("argparse help formatter failed, falling back.")
return formatter
Run Code Online (Sandbox Code Playgroud)
有了这个,你可以用任何HelpFormatter你喜欢的方式来调用它:
parser = argparse.ArgumentParser(
formatter_class=make_wide(argparse.ArgumentDefaultsHelpFormatter)
)
Run Code Online (Sandbox Code Playgroud)
或者
parser = argparse.ArgumentParser(
formatter_class=make_wide(argparse.HelpFormatter, w=140, h=20)
)
Run Code Online (Sandbox Code Playgroud)
这样做的目的是确保实际上可以使用width和max_help_position参数创建更宽的格式化程序。如果私有 API 发生变化,则由make_widea注明TypeError,并且格式化程序将原封不动地返回。这应该会使代码对于已部署的应用程序更加可靠。
我欢迎任何让这变得更加Pythonic的建议。
| 归档时间: |
|
| 查看次数: |
10733 次 |
| 最近记录: |