Python的argparse模块是标准库提供的命令行参数解析工具,支持位置参数、可选参数定义,还能自动生成帮助文档,是开发命令行脚本的常用选择。很多开发者在定义参数后,不清楚如何将解析结果传递到主函数中使用,本文将完整讲解整个实现流程。

argparse基本使用流程
使用argparse实现参数解析并让主函数访问参数,整体分为三个步骤:创建解析器、定义参数、解析参数并传递给主函数,下面逐步展开说明。
1. 创建参数解析器
首先需要导入argparse模块,然后创建ArgumentParser实例,这个实例是整个参数解析的核心对象,我们可以给它设置程序描述信息,方便用户查看帮助时了解程序功能。
import argparse # 创建解析器,设置程序描述 parser = argparse.ArgumentParser(description='示例命令行工具,演示argparse参数解析与主函数访问')
2. 定义需要的参数
创建好解析器之后,需要通过add_argument方法定义程序需要的参数,argparse支持多种参数类型,常见的有位置参数和可选参数,下面分别给出示例。
位置参数定义
位置参数是必须输入的参数,不需要加前缀,输入顺序和定义顺序一致,适合定义程序核心必填参数。
# 定义位置参数:输入文件路径,必填
parser.add_argument('input_path', type=str, help='需要处理的输入文件路径')
可选参数定义
可选参数通常以-或者--作为前缀,用户可以选择是否输入,不输入时会使用默认值,适合定义可选配置项。
# 定义可选参数:输出文件路径,默认值为output.txt
parser.add_argument('-o', '--output', type=str, default='output.txt', help='处理结果输出路径,默认值为output.txt')
# 定义可选参数:是否开启调试模式,默认关闭
parser.add_argument('-d', '--debug', action='store_true', help='是否开启调试模式')
# 定义可选参数:处理次数,类型为int,默认值为1
parser.add_argument('-c', '--count', type=int, default=1, help='处理次数,默认值为1')
3. 解析参数并在主函数中访问
参数定义完成后,调用parse_args方法即可解析命令行输入的参数,解析结果是一个命名空间对象,我们可以通过属性名直接访问各个参数的值,将其传递给主函数使用即可。
def main(input_path, output_path, debug, count):
"""
主函数,接收解析后的参数并处理
:param input_path: 输入文件路径
:param output_path: 输出文件路径
:param debug: 是否开启调试模式
:param count: 处理次数
"""
if debug:
print('调试模式已开启')
print(f'输入路径:{input_path}')
print(f'输出路径:{output_path}')
print(f'处理次数:{count}')
# 这里添加实际的业务逻辑
for i in range(count):
print(f'第{i+1}次处理')
if __name__ == '__main__':
# 解析命令行参数
args = parser.parse_args()
# 将解析后的参数传递给主函数
main(
input_path=args.input_path,
output_path=args.output,
debug=args.debug,
count=args.count
)
参数访问注意事项
在实际使用中,有几点需要注意,避免出现参数访问错误:
- 参数名对应规则:add_argument中如果定义了--output这样的长参数名,访问时使用args.output,去掉前缀--,短参数名-o不需要单独访问,和长参数名共享同一个属性。
- 类型校验:定义参数时指定的type会生效,如果用户输入的参数类型不符合要求,argparse会自动报错并提示,不需要自己额外做类型校验。
- 默认值生效场景:可选参数如果用户没有输入,会自动使用default指定的默认值,位置参数没有默认值,必须输入,否则程序会报错。
完整运行示例
假设上面的代码保存为demo.py,我们可以在命令行中运行以下命令测试参数解析效果:
# 输入所有参数运行 python demo.py ./test.txt -o ./result.txt -d -c 3 # 只输入必填的位置参数,可选参数使用默认值 python demo.py ./test.txt
第一次运行会输出调试模式开启的提示,同时打印输入路径、输出路径和处理次数,执行3次处理循环;第二次运行会使用默认的输出路径、关闭调试模式、处理次数为1,符合参数定义的预期效果。