在终端执行 Python 脚本时传递参数,最常用且标准的方法是使用 Python 内置的 argparse 模块。它功能强大,能自动处理参数解析、类型转换、生成帮助信息等,非常适合“普通的 Python 脚本”。
下面我将通过一个完整的例子,向你展示如何实现。
📜 1. 编写你的 Python 脚本
假设我们有一个名为 greet.py 的脚本,它需要接收一个必须的位置参数(名字)和一个可选的参数(问候语)。
# greet.py
import argparse# 1. 创建 ArgumentParser 对象
# description 参数用于描述这个脚本是做什么的,会显示在帮助信息中
parser = argparse.ArgumentParser(description='一个简单的问候脚本。')# 2. 添加参数
# 位置参数:用户必须提供,例如 'Alice'
parser.add_argument('name', type=str, help='要问候的名字')# 可选参数:以 '--' 或 '-' 开头,例如 --greeting 或 -g
# default 设置了默认值,如果用户不提供此参数,就使用默认值
parser.add_argument('--greeting', '-g', type=str, default='你好', help='问候语 (默认: 你好)')# 3. 解析参数
# parse_args() 方法会解析命令行参数,并将它们作为属性存储在 args 对象中
args = parser.parse_args()# 4. 使用参数
print(f"{args.greeting}, {args.name}!")
💻 2. 在终端中执行并传参
编写好脚本后,你就可以在终端(命令行)中运行它,并传递不同的参数。
场景一:只传递必须的位置参数
python greet.py Alice
输出:
你好, Alice!
这里我们只提供了 name 参数,greeting 参数使用了默认值“你好”。
场景二:传递必须参数和可选参数
python greet.py Bob --greeting Hello
输出:
Hello, Bob!
这里我们同时提供了 name 和 --greeting 参数。
场景三:使用可选参数的短格式
python greet.py Charlie -g Hi
输出:
Hi, Charlie!
我们在定义参数时指定了 -g 作为 --greeting 的别名,所以可以这样简写。
❓ 3. 获取帮助信息
argparse 模块的一个巨大优势是它能自动生成帮助信息。你只需要在命令后面加上 -h 或 --help 参数。
python greet.py --help
输出:
usage: greet.py [-h] [--greeting GREETING] name一个简单的问候脚本。positional arguments:name 要问候的名字optional arguments:-h, --help 显示此帮助信息并退出--greeting, -g GREETING问候语 (默认: 你好)
这对于你和任何其他使用你脚本的人来说都非常方便,无需查看源代码就能知道如何使用。
🔍 补充:更简单的 sys.argv 方法
对于极其简单的脚本,你也可以使用 sys.argv 来获取参数。它是一个列表,包含了所有命令行参数。
sys.argv[0]是脚本名称。sys.argv[1]是第一个参数,以此类推。
# simple_script.py
import sys# 获取第一个和第二个参数
name = sys.argv[1]
age = sys.argv[2]print(f"你的名字是 {name},今年 {age} 岁。")
在终端执行:
python simple_script.py Alice 25
输出:
你的名字是 Alice,今年 25 岁。
注意:使用 sys.argv 时,你需要自己处理参数的数量、类型和错误,如果参数很多或逻辑复杂,代码会变得难以维护。因此,对于绝大多数情况,强烈推荐优先使用 argparse 模块。
