【问题标题】:Formatting the ArgParse help menu格式化 ArgParse 帮助菜单
【发布时间】:2021-09-24 17:16:36
【问题描述】:

我正在尝试为 ArgParse 创建一个更具吸引力的菜单,主要是在显示帮助菜单时保持一致的格式。我了解如何使用各种属性来制作需要或不需要的东西,但不确定如何格式化文本以使它们保持一致。

我当前的相关代码如下所示

import argparse

parser = argparse.ArgumentParser(prog='myprogram', description='Select which files to parser and where to save them.')

parser.add_argument('-f', metavar='--file', type=str, help='select a single file to process', required=False)
parser.add_argument('-d', metavar='--dir', type=str, help='filepath directory', required=False)

args = parser.parse_args()

这段代码的输出是运行命令 filename.py -h 时

我想做的只是在 -f 和 --file 之间添加一个逗号以及任何其他命令。我知道这是相当小的细节,但我能说什么我喜欢一致地格式化。

我在我的机器上运行 Python v3.8.2 和 Argparse v1.4.0

【问题讨论】:

  • add_argument 呼叫中删除metavar=。只保留'--file'
  • 一个更常见的参数定义是:parser.add_argument('-f', '--file', help='select a single file to process')。然后用户可以使用-f filename--file filename。您将 --file 用于元变量会令人困惑。
  • 默认的帮助行是'-f FILE, --file FILE select ...'。重复的“文件”可以用metavar 替换或缩短,但不能完全消除。已经有人要求变体,尤其是更紧凑的版本,但这需要继承 HelpFormatter 并修改方法。如果您不喜欢格式化细节,则允许甚至鼓励调整格式化程序;但不要期望有很多牵手。
  • @hpaulj 好的,这是有道理的!似乎有很多争论,如果有的话,知道何时使用它们是如此令人困惑。你能和 HelpFormatter 多谈谈吗?

标签: python-3.x command-line-arguments argparse


【解决方案1】:

这应该说明主要的帮助格式化可能性(没有子类化 helpformatter):

In [1]: import argparse
In [2]: parser=argparse.ArgumentParser()
In [3]: parser.add_argument('-f','--foo',action='store_true', help='a store true
   ...: ');
In [4]: parser.add_argument('-b','--bar',help='basic store');
In [5]: parser.add_argument('-x','--xxx', metavar='',help='blank metavar');
In [6]: parser.print_help()
usage: ipython3 [-h] [-f] [-b BAR] [-x]

optional arguments:
  -h, --help         show this help message and exit
  -f, --foo          a store true
  -b BAR, --bar BAR  basic store
  -x , --xxx         blank metavar

【讨论】:

  • 这很有意义!我现在唯一的困惑是在哪里定义了用法:ipython3 [-h] [-f] [-b BAR] [-x]
  • parser.format_usage 创建使用行。 format_help 这样做并添加了帮助行。实际格式化由HelpFormatter 类中的方法完成,特别是由_format_usage 方法完成。这种方法有点脆弱,可能会被metavar 中的错误字符弄乱。格式化用法和帮助是一项艰巨的任务,涉及的代码与解析一样多。
猜你喜欢
  • 1970-01-01
  • 2011-05-21
  • 1970-01-01
  • 1970-01-01
  • 2011-07-24
  • 1970-01-01
  • 2012-06-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多