对 argparse 子命令的更好帮助

Zac*_*ner 4 python argparse

给出以下代码片段:

import argparse
import sys

parser = argparse.ArgumentParser()

subparsers = parser.add_subparsers(help="subcommand help")

command1 = subparsers.add_parser("foo", description="Run foo subcommand")
command2 = subparsers.add_parser("bar", description="Run bar subcommand")
opts = parser.parse_args(sys.argv[1:])
Run Code Online (Sandbox Code Playgroud)

当我打印此帮助时,我得到以下信息:

import argparse
import sys

parser = argparse.ArgumentParser()

subparsers = parser.add_subparsers(help="subcommand help")

command1 = subparsers.add_parser("foo", description="Run foo subcommand")
command2 = subparsers.add_parser("bar", description="Run bar subcommand")
opts = parser.parse_args(sys.argv[1:])
Run Code Online (Sandbox Code Playgroud)

有没有办法让它打印类似这样的东西:

usage: test.py [-h] {foo,bar} ...

positional arguments:
  {foo,bar}   subcommand help

optional arguments:
  -h, --help  show this help message and exit
Run Code Online (Sandbox Code Playgroud)

不提供自定义格式化程序?如果我更改格式化程序,那么它也会更改有关如何打印帮助的其他所有内容,但就我而言,我只想更改从父(子)命令打印子命令帮助的方式。

Wil*_*lva 6

您需要设置help参数,而不是description参数,以获得您想要的输出:

import argparse
import sys

parser = argparse.ArgumentParser()

subparsers = parser.add_subparsers(help="subcommand help")

command1 = subparsers.add_parser("foo", help="Run foo subcommand")
command2 = subparsers.add_parser("bar", help="Run bar subcommand")
opts = parser.parse_args(sys.argv[1:])
Run Code Online (Sandbox Code Playgroud)

输出:

usage: test.py [-h] {foo,bar} ...

positional arguments:
  {foo,bar}   subcommand help
    foo       Run foo subcommand
    bar       Run bar subcommand

optional arguments:
  -h, --help  show this help message and exit
Run Code Online (Sandbox Code Playgroud)

argparse 文档对帮助值有这样的说法:

帮助值是一个包含参数简短描述的字符串。当用户请求帮助时(通常通过在命令行中使用 -h 或 --help ),这些帮助描述将与每个参数一起显示。

这是关于描述值的说法:

该参数简要描述了该程序的功能及其工作原理。在帮助消息中,说明显示在命令行用法字符串和各种参数的帮助消息之间。