Python 的参数解析器将参数名打印为大写

3 投票
2 回答
2874 浏览
提问于 2025-04-30 08:41

我正在尝试为我的Python脚本编写使用说明/帮助信息,使用的是argparse这个库。

这是我的示例代码:

import argparse
parser = argparse.ArgumentParser(
        description='My description')

parser.add_argument(
        "-r", "--remote", 
        help="help message")

parser.print_help()

输出结果:

usage: [-h] [-r REMOTE]

My description

optional arguments:
  -h, --help            show this help message and exit
  -r REMOTE, --remote REMOTE
                        help message

我不知道为什么在上面的输出中,-r--remote后面会打印出REMOTE

有没有人能告诉我我哪里做错了,或者我该怎么做才能去掉它?

暂无标签

2 个回答

0

你缺少了 action

import argparse
parser = argparse.ArgumentParser(
        description='My description')

parser.add_argument(
        "-r", "--remote", action="store_true", # add action
        help="help message")

parser.print_help()
usage: -c [-h] [-r]

My description

optional arguments:
  -h, --help    show this help message and exit
  -r, --remote  help message
7

你看到的这个 metavar 是自动生成的,它是从选项字符串中提取出来的,用来作为一个占位符。它的作用是告诉用户在这里需要填写一个值。

你可以通过 metavar 这个关键字参数 来设置一个明确的 metavar 值:

ArgumentParser 生成帮助信息时,它需要一种方式来引用每个预期的参数。默认情况下,ArgumentParser 对象使用 dest 值作为每个对象的“名称”。对于位置参数,dest 值会直接使用,而对于可选参数,dest 值会被转换为大写。

你之所以能看到这个,是因为你的参数需要一个值;如果你希望它是一个开关,可以使用 action='store_true';在这种情况下,选项的默认值是 False,除非用户明确指定这个开关。

后者的示例:

>>> import argparse
>>> parser = argparse.ArgumentParser(
...         description='My description')
>>> parser.add_argument("-r", "--remote", action='store_true', help="help message")
_StoreTrueAction(option_strings=['-r', '--remote'], dest='remote', nargs=0, const=True, default=False, type=None, choices=None, help='help message', metavar=None)
>>> parser.print_help()
usage: [-h] [-r]

My description

optional arguments:
  -h, --help    show this help message and exit
  -r, --remote  help message
>>> opts = parser.parse_args([])
>>> opts.remote
False
>>> opts = parser.parse_args(['-r'])
>>> opts.remote
True

撰写回答