Skip to content

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 / --helpargparse 默认提供;帮助文案来自各 add_argument(..., help=...)

如何选择?

  • 一两个简单参数sys.argv 足够。
  • 需要规范的子命令、类型、帮助、默认值:优先 argparse
  • 必须与老式 Unix 短选项风格一致:可考虑 getopt,否则一般不必。

参考