Python 命令行参数
命令行参数是在终端里运行脚本时,写在 python 脚本名 后面、用空格分开的一段段字符串。程序可以据此切换行为、传入路径等,而不必改源码。
为什么要用命令行参数?
- 通用性:例如处理 CSV 时把文件路径从命令行传入,同一脚本可处理不同文件。
- 自动化:方便被 Shell、任务计划、CI 等调用。
- 配置方式之一:与 环境变量、配置文件等配合使用。
安全提示:不要把数据库密码、Token 等敏感信息放在命令行。它们可能出现在进程列表、Shell 历史或日志里。敏感配置更适合用环境变量、密钥管理服务或受权限保护的配置文件(并注意勿提交到版本库)。
如何在终端里传入参数?
在脚本名后面依次写出参数即可:
bash
python script.py arg1 arg2 argN或使用 python3、虚拟环境中的解释器等,视环境而定。
在 PyCharm 里调试
运行 → 编辑配置(Run → Edit Configurations)中,在 Parameters / 形参 一栏填写传给脚本的参数(与在终端里写在脚本名后的内容一致)。
在脚本里如何读取?
常见三种方式:
| 方式 | 适用场景 |
|---|---|
sys.argv | 参数很少、自己手写解析逻辑即可 |
getopt | 需要类似 Unix 的 短选项(-x、-f file 等) |
argparse | 需要子命令、类型转换、自动生成 --help 等(新项目首选) |
下面分别说明。与「模块」概念相关的内容见 模块。
1. sys.argv
sys.argv 是字符串列表:第一个元素是脚本的调用名(可能是路径,随系统与启动方式变化),之后才是用户传入的参数。
python
import sys
if len(sys.argv) != 2:
raise ValueError("请提供要发送测试邮件的邮箱地址。")
print(f"脚本名为: {sys.argv[0]}")
email = sys.argv[1]
print(f"将向 {email} 发送测试邮件")示例(终端):
text
$ python command_line_args.py test@example.com
脚本名为: command_line_args.py
将向 test@example.com 发送测试邮件
$ python command_line_args.py
Traceback (most recent call last):
...
ValueError: 请提供要发送测试邮件的邮箱地址。要点:参数全是字符串;需要整数、路径等时要自己 int()、校验或使用下文的 argparse。
2. getopt 模块
风格接近 Unix getopt:适合 -字母 形式的选项,并与 sys.argv[1:] 配合(去掉脚本名)。
python
import getopt
import sys
argv = sys.argv[1:]
opts, args = getopt.getopt(argv, "x:y:")
print(f"解析得到的选项: {opts}")
print(f"剩余位置参数: {args}")text
$ python command_line_args.py -x 1 -y 2 A B
解析得到的选项: [('-x', '1'), ('-y', '2')]
剩余位置参数: ['A', 'B']字符串 "x:y:" 表示 -x、-y 各自需要一个值。更复杂的规则见官方文档。
3. argparse 模块(推荐)
可声明位置参数、可选参数、默认值、类型、帮助说明等,并自动生成 --help。
python
import argparse
parser = argparse.ArgumentParser(description="简单 argparse 示例")
parser.add_argument("language", help="编程语言名称")
parser.add_argument("name", help="你的名字")
args = parser.parse_args()
if args.language == "Python":
print("我也喜欢 Python")
else:
print("建议学学 Python,你会喜欢的")
print(f"你好 {args.name},这是 argparse 的简单介绍")text
$ python command_line_args.py Python David
我也喜欢 Python
你好 David,这是 argparse 的简单介绍
$ python command_line_args.py Java Lisa
建议学学 Python,你会喜欢的
你好 Lisa,这是 argparse 的简单介绍
$ python command_line_args.py -h
usage: command_line_args.py [-h] language name
positional arguments:
language 编程语言名称
name 你的名字
options:
-h, --help show this help message and exit说明里的 -h / --help 由 argparse 默认提供;帮助文案来自各 add_argument(..., help=...)。
如何选择?
- 一两个简单参数:
sys.argv足够。 - 需要规范的子命令、类型、帮助、默认值:优先
argparse。 - 必须与老式 Unix 短选项风格一致:可考虑
getopt,否则一般不必。