命令行参数是指在运行程序时通过命令行传递给程序的参数,可以用于控制程序的行为,比如指定文件路径、设置参数等。命令行参数就像在餐厅点菜时提供的特殊要求,比如“不要辣”、“多加一点盐”,这些要求会影响最终的菜品。
Python 提供了 sys.argv
列表来访问命令行参数,sys.argv
是一个包含命令行参数的列表,其中第一个元素是脚本的名称,后续元素是传递给脚本的参数。比如我们有一个名为example.py
的脚本,代码如下所示:
import sys # 打印所有命令行参数 print("所有命令行参数:", sys.argv) # 打印脚本名称 print("脚本名称:", sys.argv[0]) # 打印第一个命令行参数 if len(sys.argv) > 1: print("第一个命令行参数:", sys.argv[1])
在上面代码中我们就通过 sys.argv
访问了命令行参数,然后打印了所有命令行参数、脚本名称和第一个命令行参数。
现在我们可以在命令行中运行这个脚本,并传递参数:
➜ python3 example.py 所有命令行参数: ['example.py'] 脚本名: example.py ➜ python3 example.py arg1 所有命令行参数: ['example.py', 'arg1'] 脚本名: example.py 第一个参数: arg1 ➜ python3 example.py arg1 arg2 所有命令行参数: ['example.py', 'arg1', 'arg2'] 脚本名: example.py 第一个参数: arg1
可以看到通过 sys.argv
我们可以访问命令行参数,然后根据参数的个数和位置进行处理。
比如现在我们来编写一个加法计算器的脚本,接受两个数字作为命令行参数,然后进行加法运算,下面来看下应该如何编写这个代码:
import sys def add(a, b): return a + b if len(sys.argv) != 3: print("用法: python example.py num1 num2") else: num1 = float(sys.argv[1]) num2 = float(sys.argv[2]) result = add(num1, num2) print(f"结果: {result}")
因为加法需要两个值,所以我们需要传递两个参数,如果参数个数不等于 3,我们就提示用户正确的用法,然后将参数转换为数字,进行加法运算,最后输出结果,当然最好加上 try...except
来处理参数转换异常。
python3 example.py 3 5
除了使用 sys.argv
处理命令行参数外,Python 还提供了 argparse
模块,可以更方便地解析命令行参数,提供帮助信息和错误提示。
import argparse # 创建解析器 parser = argparse.ArgumentParser(description="一个简单的加法计算器") # 添加参数 parser.add_argument("num1", type=float, help="第一个数") parser.add_argument("num2", type=float, help="第二个数") # 解析参数 args = parser.parse_args() # 进行加法运算 result = args.num1 + args.num2 print(f"结果: {result}")
使用 argparse
就像填写一个表单,指定每个参数的名称和类型,解析时会自动进行验证和帮助信息生成。上面代码中,我们首先创建了一个 ArgumentParser
对象,然后使用 add_argument
方法添加参数,指定参数名称、类型和帮助信息,最后使用 parse_args
方法解析参数,然后进行加法运算。
现在我们就可以在命令行中运行这个脚本,如果不传递任何参数,会显示一些提示信息:
➜ python3 example.py usage: example.py [-h] num1 num2 example.py: error: the following arguments are required: num1, num2
加上 -h
参数可以查看到详细的帮助信息:
➜ python3 example.py -h usage: example.py [-h] num1 num2 一个简单的加法计算器 positional arguments: num1 第一个数 num2 第二个数 options: -h, --help show this help message and exit
当然按照提示输入两个数字,就可以得到加法运算的结果:
➜ python3 example.py 5 5 结果: 10.0
可以看出 argparse
比 sys.argv
更加方便和易用。当然对于更大的项目,除了可以使用 argparse
外, 我们还推荐使用第三方库 click
、docopt
等,这些库提供了更多的功能和选项,可以更好地处理命令行参数。
大家可以自行编写一个脚本,接受命令行参数并进行某种运算,比如计算矩形的面积或圆的周长,然后运行脚本,传递参数,查看结果。