Python 的 argparse 自定义 help 命令分组

作者: , 共 1521 字 , 共阅读 0

Python的命令行包argparse内置了-h, --help命令。但它没有分组,和其它的命令混在一起,并且显示在最前面。我更喜欢把它放在单独的「LOG 和帮助」分组:

import argparse

parser = argparse.ArgumentParser(
    usage="示例程序",
    add_help=False,
    formatter_class=lambda prog: argparse.RawTextHelpFormatter(prog, max_help_position=50))

parser.add_argument("--server", required=True, help="必备参数")

group = parser.add_argument_group("LOG和帮助")
group.add_argument("--log", default="info", help="设置LOG级别")
group.add_argument("-h", "--help", action="help", help="查看帮助信息")

options = parser.parse_args()

注意上面的-h, --help必须设置为argparse内置的action="help"。下面这种写法:

group.add_argument("-h", "--help", action="store_true", help="查看帮助信息")

options = parser.parse_args()
if options.help:
    parser.print_help()
    sys.exit(0)

这时候直接-h将提示没有指定--server,而不是正常地显示帮助信息。

补充:

如果用到子命令, add_help=False 的设置将把子命令的帮助信息也删掉,需要自己手工加入:

# 如果上面设置了设置子parser的帮助信息
if self._subparsers:
    for subparser in self._subparsers._group_actions:
        for subparse in subparser._name_parser_map.items():
            group = subparse[1].add_argument_group("LOG和帮助信息")
            group.add_argument("--log", default="info", help="log级别。")
            group.add_argument("--log_file", help="log到的文件地址。")
            group.add_argument("-h", "--help", action="help", help="查看帮助信息")

Q. E. D.

类似文章:
命令行参数的初步说明,请参考argparse 模块用法实例详解,写的很清晰而详细。
编程 » C++, boost, 命令行
我们用boost的命令行库program_options解析命令行,在解释布尔命令行时使用下面代码:
Python 提供很多语法糖,用起来非常方便。@dataclass 就是其中之一。
IT » Linux
假设一个目录下有很多很多".bak"文件,如果我们直接用rm命令删除:
编程 » Python
今天写一段程序时遇到一个问题,查了好一会才搞清楚。代码可以简化为下面这个小代码:
安装 selenium ,使用 requestium 来调用 selenium 程序更为简单,因此可一起安装:
编程 » Python, numpy
今天写 Python 代码时遇到一个恶心的 bug ,花了好一会才定位和搞清楚。我的目标是寻找第一个非 NAN 的数的位置(其中 array 是一个 numpy 向量),很自然有下面实现:
IT » Python, Ubuntu
主要是update-alternatives命令的使用。
编程 » Python
Python 在搜索模块时,依次搜索sys.path里的位置,直到找到模块为止。下面命令可以查看当前的搜索路径:
编程 » Linux, rsync
在一个rsync命令同步文件夹时:
爬升约 800 米(下降约 500 米,起点终点海拔不一样),路程约 12 公里;路好走。
IT »
zhiqiang.org之前用Google Apps提供邮箱服务,后来不知怎么就被关了。昨天弄了下,把它挪到了腾讯企业邮箱,用的免费的基准版服务。今天已经生效了。