You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于用户输入通过Python Argparse输出不同帮助描述

解决argparse实现分命令帮助输出的问题

需求说明

需要实现:

  • 执行 python httpc.py -h 时输出通用帮助信息
  • 执行 python httpc.py get -h(或 python httpc.py -h get)时输出GET命令的帮助信息
  • 执行 python httpc.py post -h(或 python httpc.py -h post)时输出POST命令的帮助信息

原代码将所有帮助文本合并输出,不符合需求,需通过argparse的子命令功能改造。

改造方案

利用argparse的subparsers子命令解析器,为每个命令(get/post)创建独立的子解析器,分别绑定对应的帮助文本和参数,实现不同命令的独立帮助输出。

翻译后的帮助文本

general_help = '''httpc 是一个类curl的工具,但仅支持HTTP协议。
用法:
    httpc 命令 [参数]
可用命令:
    get    发送HTTP GET请求并打印响应。
    post   发送HTTP POST请求并打印响应。
    help   显示此帮助界面。

使用 "httpc help [命令]" 获取指定命令的详细信息。
'''

get_help = '''用法: httpc get [-v] [-h key:value] URL
Get命令用于向指定URL发送HTTP GET请求。
-v  打印响应详情,包括协议、状态码和响应头。
-h key:value  为请求添加自定义请求头,格式为'key:value'。
'''

post_help = '''用法: httpc post [-v] [-h key:value] [-d 内联数据] [-f 文件路径] URL
Post命令用于向指定URL发送HTTP POST请求,支持内联数据或文件内容作为请求体。

-v  打印响应详情,包括协议、状态码和响应头。
-h key:value  为请求添加自定义请求头,格式为'key:value'。
-d 字符串  将内联字符串作为POST请求的请求体。
-f 文件路径  将指定文件的内容作为POST请求的请求体。
注意:-d 和 -f 参数不能同时使用。
'''

完整改造代码

import argparse
from argparse import RawTextHelpFormatter

general_help = '''httpc 是一个类curl的工具,但仅支持HTTP协议。
用法:
    httpc 命令 [参数]
可用命令:
    get    发送HTTP GET请求并打印响应。
    post   发送HTTP POST请求并打印响应。
    help   显示此帮助界面。

使用 "httpc help [命令]" 获取指定命令的详细信息。
'''

get_help = '''用法: httpc get [-v] [-h key:value] URL
Get命令用于向指定URL发送HTTP GET请求。
-v  打印响应详情,包括协议、状态码和响应头。
-h key:value  为请求添加自定义请求头,格式为'key:value'。
'''

post_help = '''用法: httpc post [-v] [-h key:value] [-d 内联数据] [-f 文件路径] URL
Post命令用于向指定URL发送HTTP POST请求,支持内联数据或文件内容作为请求体。

-v  打印响应详情,包括协议、状态码和响应头。
-h key:value  为请求添加自定义请求头,格式为'key:value'。
-d 字符串  将内联字符串作为POST请求的请求体。
-f 文件路径  将指定文件的内容作为POST请求的请求体。
注意:-d 和 -f 参数不能同时使用。
'''

# 创建主解析器
parser = argparse.ArgumentParser(description=general_help, formatter_class=RawTextHelpFormatter)
parser.add_argument("--port", help="服务器端口", type=int, default=80)

# 创建子命令解析器
subparsers = parser.add_subparsers(dest='command', required=True, help='可选的HTTP命令')

# 配置GET子命令
get_parser = subparsers.add_parser('get', help=get_help, formatter_class=RawTextHelpFormatter)
get_parser.add_argument("URL", help="请求目标URL", type=str)
get_parser.add_argument("-v", help="开启详细输出模式", action="store_true")
get_parser.add_argument("-h", "--header", dest='headers', help="自定义请求头,格式为'key:value'", type=str, action='append')

# 配置POST子命令
post_parser = subparsers.add_parser('post', help=post_help, formatter_class=RawTextHelpFormatter)
post_parser.add_argument("URL", help="请求目标URL", type=str)
post_parser.add_argument("-v", help="开启详细输出模式", action="store_true")
post_parser.add_argument("-h", "--header", dest='headers', help="自定义请求头,格式为'key:value'", type=str, action='append')
post_parser.add_argument("-d", help="内联请求体数据", type=str)
post_parser.add_argument("-f", help="读取文件作为请求体", type=str)

args = parser.parse_args()

# 参数校验:POST的-d和-f不能同时存在
if args.command == 'post' and args.d is not None and args.f is not None:
    parser.error("-d 和 -f 参数不能同时使用")

效果验证

  • 执行 python httpc.py -h:输出通用帮助信息
  • 执行 python httpc.py get -h:输出GET命令的专属帮助
  • 执行 python httpc.py post -h:输出POST命令的专属帮助

内容的提问来源于stack exchange,提问作者Jennifer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 06:50:26