argparse是Python命令行脚本开发的推荐标准方案,sys.argv适合简单场景;前者支持自动帮助、类型转换、校验等,后者仅返回原始参数列表,需手动处理。

Python命令行脚本开发中,argparse是推荐的标准方案,sys.argv适合简单场景。两者不是互斥关系,而是按需选择:小工具用sys够快,正式脚本用argparse更健壮、可维护。
用sys.argv快速获取参数
sys.argv是最底层的方式,返回命令行输入的字符串列表,sys.argv[0]是脚本名,后续元素是传入的参数。适合单参数、无选项、调试用的小脚本。
- 直接索引取值,例如
filename = sys.argv[1](注意加try/except防报错) - 用
len(sys.argv)判断参数个数是否符合预期 - 不支持自动帮助信息、类型转换、参数校验,全靠自己写逻辑
用argparse构建专业命令行接口
argparse是Python标准库中专为命令行解析设计的模块,能自动生成帮助文档、处理短/长选项、类型转换、默认值、互斥组等。
- 先创建
ArgumentParser对象,调用add_argument()定义参数,如parser.add_argument("-f", "--file", help="输入文件路径") - 调用
parser.parse_args()后得到命名空间对象,属性名即参数名(如args.file) - 支持
type=int、default="xxx"、required=True、nargs="+"(接收多个值)等实用参数 - 运行脚本时加
-h或--help自动输出格式化帮助页
常见组合技巧与避坑点
实际开发中常混合使用两种方式,或在argparse基础上做增强。
立即学习“Python免费学习笔记(深入)”;
- 用
argparse.ArgumentParser(prog="mytool")自定义程序名,避免显示完整路径 - 对必需但可能为空的参数(如配置文件),用
const+nargs="?"实现“开关式”参数 - 避免直接修改
sys.argv再传给argparse;如需预处理,应先提取、再构造新参数列表 - 子命令支持用
add_subparsers(),适合git commit、git push这类多动作工具
一个最小可用示例
以下是一个带文件输入、是否静默模式、输出行数的脚本骨架:
import argparsedef main(): parser = argparse.ArgumentParser(description="统计文本行数") parser.add_argument("file", help="要读取的文件路径") parser.add_argument("-s", "--silent", action="store_true", help="不打印内容,只输出行数") args = parser.parse_args()
with open(args.file) as f: lines = f.readlines() print(len(lines)) if not args.silent: print("".join(lines[:3])) # 打印前3行示意if name == "main": main()
保存为count.py后,可运行python count.py data.txt -s或python count.py data.txt --help验证效果。










