在 Python 中,命令行参数是指我们在终端或命令提示符下运行脚本时传递给脚本的值。它们就像是程序的输入数据,让我们能够在不修改代码的情况下改变程序的行为。
示例:
> python add.py 10 20
在这里:
**python:**运行解释器**add.py:**脚本名称**10 20:**传递给程序的参数
处理命令行参数的方法
Python 提供了以下内置模块来处理命令行参数:
- sys 模块:允许我们像操作列表一样访问参数 (sys.argv)。
- getopt 模块:帮助我们解析参数,其风格类似于 Unix/Linux 命令中的选项处理方式。
- argparse 模块: 这是定义、解析和处理参数最强大、最用户友好的方式。
1. 使用 sys.argv
在 Python 中访问命令行参数最简单的方法就是通过 sys 模块。它提供了一个名为 sys.argv 的列表,用于存储我们在命令行中输入的 python 命令之后的所有内容。
- sys.argv: Python 中的一个列表,包含所有的命令行参数。
- sys.argv[0]: 始终保存正在执行的脚本的名称(例如 add.py)。
- sys.argv[1:]: 保存我们实际传递的参数(例如像 10 20 这样的数字、文件名或其他输入)。
Python
CODEBLOCK_4d10ef73
运行
> python add.py 5 10 15
输出结果
> Total arguments: 4
> Script name: add.py
> Arguments: [‘5‘, ‘10‘, ‘15‘]
> Sum = 30
原理解析:
- sys.argv[0]: 脚本名称(例如 add.py)。
- sys.argv[1:]: 用户提供的参数(例如数字)。
- len(sys.argv): 给出参数的总数量。
- 一个循环将参数转换为整数并将它们相加。
2. 使用 getopt
当我们想要处理标志和选项(包括短选项 -h 和长选项 –help 样式)时,会使用 getopt 模块。当我们的脚本需要类似 Linux 命令那样的命令行选项时,这非常有用。
示例:
Python
CODEBLOCK_dc42c3c6
运行
> python script.py -o result.txt
输出结果
> Output mode: result.txt
原理解析:
- sys.argv[1:]: 获取传递给脚本的参数。
- options = "hmo:": 短选项: -h, -m, -o (-o 期望接收一个值)。
- longoptions: 长版本: –Help, –Myfile, –Output=。
- getopt.getopt(): 将参数解析为 (选项, 值) 对。
循环逻辑:
- -h / –Help: 显示帮助。
- -m / –My_file: 显示脚本名称。
- -o / –Output: 显示提供的值。
- 错误处理: 捕获无效的选项。
3. 使用 argparse
argparse 是在 Python 中处理命令行参数最简单、最强大的方法。它具有以下特性:
- 自动创建帮助消息。
- 支持默认值、类型检查和选项。
- 自带内置的 -h / –help 标志。
示例 1:基础解析器
Python
CODEBLOCK_27c61480
运行
> python script.py -h
输出结果
> usage: script.py [-h]
> optional arguments:
> -h, –help show this help message and exit
原理解析:
- argparse.ArgumentParser(): 创建一个解析器对象来处理参数。
- parser.parse_args(): 处理来自命令行的参数。
- 由于没有定义任何参数,脚本仅支持默认的 -h/–help 选项。
示例 2:添加描述信息
Python
CODEBLOCK_d22dbcf9
运行
> python script.py -h
输出结果
> usage: script.py [-h]
> Demo of argparse
> options:
> -h, –help show this help message and exit
原理解析:
- argparse 模块: 用于在 Python 中处理命令行参数。
- ArgumentParser(description=…): 创建一个解析器对象。当我们使用帮助选项时,描述信息会显示出来。
- parse_args(): 处理运行脚本时给出的参数。
示例 3:可选参数
Python
“
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-o", "–Output", help="Show output message")
args = parser.parse_args()
if ar