2.17 解析命令行参数
2.17.1 通过sys模块解析
笔者在Python基础篇第一章中讲了Python运行的方式,一共有3种:
1、交互模式
2、命令行脚本模式
3、集成开发环境模式
其中第2种运行方式:命令行脚本模式
是可以向脚本传递参数的。我们可以通过模块sys
来获取到传递给脚本的参数。
如果通过集成开发环境模式直接运行或者通过命令行脚本模式运行而没有传递参数时,sys.argv
获取到的就是脚本的路径:
集成开发环境模式直接运行
import sys
from icecream import ic
ic(sys.argv)
14:59:10|> sys.argv: [‘E:/BaiduNetdiskWorkspace/FrbPythonFiles/t1.py’]
命令行脚本模式运行而没有传递参数
E:\BaiduNetdiskWorkspace\FrbPythonFiles>Python t1.py
15:04:05|> sys.argv: [‘t1.py’]
命令行脚本模式运行并传递参数
E:\BaiduNetdiskWorkspace\FrbPythonFiles>Python t1.py arg1 arg2 arg3
15:06:53|> sys.argv: [‘t1.py’, ‘arg1’, ‘arg2’, ‘arg3’]
此时,我们可以在脚本中通过sys.argv
收集到的参数,然后进行处理。例如:
import sys
from icecream import ic
argvs = sys.argv
if len(argvs) == 1:
ic('请输入参数')
elif len(argvs) == 2:
ic(f'参数的个数正确,输入的参数是{argvs[1]}')
else:
ic('参数的数量太多啦!')
直接运行时:
15:10:54|> ‘请输入参数’
命令行带脚本运行时:
E:\BaiduNetdiskWorkspace\FrbPythonFiles>Python t1.py arg1
15:12:10|> f’参数的个数正确,输入的参数是{argvs[1]}': ‘参数的个数正确,输入的参数是arg1’
通过这种方式可以大大加强脚本的实用性,针对不同的参数完成不同的功能,让一个脚本具备更多的功能。
2.17.2 通过argparse模块来解析
我们还可以使用标准库中的argparse模块来解析命令行参数。argparse模块可以帮助我们定义和解析命令行参数,并生成帮助信息。
以下是一个简单的例子,演示如何使用argparse模块解析命令行参数:
import argparse
# 创建一个ArgumentParser对象
parser = argparse.ArgumentParser(description='命令行参数解析器')
# 添加命令行参数
parser.add_argument('--input', type=str, help='输入文件路径')
parser.add_argument('--output', type=str, help='输出文件路径')
parser.add_argument('--verbose', action='store_true', help='是否输出详细信息')
# 解析命令行参数
args = parser.parse_args()
# 使用命令行参数
if args.verbose:
print('正在处理文件...')
if args.input:
print(f'输入文件路径为:{args.input}')
if args.output:
print(f'输出文件路径为:{args.output}')
在上面的例子中,我们首先创建了一个ArgumentParser对象,并使用add_argument()方法添加了三个命令行参数:–input、–output和–verbose。其中,–input和–output是带有参数值的选项,而–verbose是一个布尔选项,不需要参数值。
其实还有2个命令行参数是自动会添加进去,即:-h和–help,用来显示命令行参数帮助信息,同时,我们也为命令行参数添加了帮助说明,这样,在遇到不清楚参数的情况下,我们就可以通过-h参数查看帮助:
E:\BaiduNetdiskWorkspace\FrbPythonFiles>Python t1.py -h
usage: t1.py [-h] [–input INPUT] [–output OUTPUT] [–verbose]
命令行参数解析器
options:
-h, --help show this help message and exit
–input INPUT 输入文件路径
–output OUTPUT 输出文件路径
–verbose 是否输出详细信息
然后,我们调用parse_args()方法解析命令行参数,并将解析结果保存在args变量中。最后,我们根据命令行参数的值,执行相应的操作。
例如,如果命令行中输入了以下命令:
Python myscript.py --input input.txt --output output.txt --verbose
那么,程序将输出以下内容:
正在处理文件…
输入文件路径为:input.txt
输出文件路径为:output.txt
如果只输入以下命令:
Python myscript.py --input input.txt
那么,程序将输出以下内容:
输入文件路径为:input.txt
如果需要获取更多关于argparse模块的信息,可以查看Python官方文档中的相关内容。