python - 访问参数帮助字符串中的 "implicit"元变量值

标签 python argparse

当您在 argparse.ArgumentParser() 上调用 add_argument 时没有明确的操作,您将获得 “store” 操作。在自动生成的 --help 输出中,您将获得长选项的大写字母,除非您设置 metavar:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--version', metavar='X.Y.Z')
parser.add_argument('--date'),
parser.parse_args(['--help'])

显示:

usage: try.py [-h] [--version X.Y.Z] [--date DATE]

optional arguments:
  -h, --help       show this help message and exit
  --version X.Y.Z
  --date DATE

在此,我将称 X.Y.Z 为显式元变量,将 DATE 称为隐式元变量。

如果你想获得更有用的帮助,你可以这样做:

parser.add_argument('--version', metavar='X.Y.Z', 
                    help = "set version to % (metavar)s")

给出(仅显示更改的行):

  --version X.Y.Z  set version to X.Y.Z

并且能够在帮助字符串中使用 %(metavar)s 很好,因为当您更改 metavar='MAJOR.MINOR' 时,帮助不会'不需要更新(您一定会忘记)。

但是,如果您使用隐式元变量为 --date 参数添加帮助:

parser.add_argument('--date', 
                    help="use %(metavar)s instead of today's date")

你得到:

  --date DATE      use None instead of today

None 不是我所期望的,也不是我想要的。

当然,我总是可以在帮助中对“DATE”进行硬编码,或者明确提供元变量(尤其是在帮助字符串中使用它时)。但是当我这样做时,我一定会忘记在更改长选项的名称时更新元变量。

是否有一种“自动”方式来获取帮助字符串中的 DATE 而不是 None
或者我在使用 %(metavar)s 我应该使用其他东西(如果是的话,是什么)?

最佳答案

在调用 parser.parse_args() 之前,您可以做的一件事是更新添加到 parser 的那些具有 metavar 属性的操作是:

for action in parser._actions:
    if not hasattr(action, 'metavar') or not hasattr(action, 'dest'):
        continue
    metavar = getattr(action, 'metavar')
    if metavar is None:
        action.metavar = action.dest.upper()

生成的输出如下:

  --version X.Y.Z  set version to X.Y.Z
  --date DATE      use DATE instead of today

但正如我们用 BDFL 的母语所说:“mooi is anders”¹


¹ 美丽的外表不同

关于python - 访问参数帮助字符串中的 "implicit"元变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51085465/

相关文章:

python - 寻找互补 DNA 链的更 pythonic 方法

python - 如果元素已经存在于列表中,如何用数字增加列表中的字符串

python - 如果存在另一个参数,如何禁用一个参数?

python - 如何使用 Python 的 argparse 设置命令行参数 -h?

python - 使用 parse_known_args() 时推迟退出 --help

python - 如何将 ScrolledWindow (tkinter) 滚动条放置在底部

python - 将数组的值从 nan 更改为零

python - 将数据库查询转换为有用的格式

Python argparse 与多个组中的相同参数互斥

python - 解析非预定义参数