上一篇
如何在Linux中给Python脚本传参?
- Linux
- 2025-06-30
- 2
在Linux中,Python脚本可通过命令行传递参数,使用
sys.argv
获取基础参数列表,或通过
argparse
模块创建高级命令行接口,支持参数解析、类型验证和帮助文档生成。
在Linux环境下,Python脚本的参数传递是自动化任务和脚本开发的核心技能,以下是五种专业、高效且符合生产标准的传参方法,结合最佳实践和安全性建议:
命令行参数(sys.argv
)
适用场景:快速获取简单参数
原理:通过sys
模块读取终端输入的参数列表
import sys if len(sys.argv) > 1: print("参数1:", sys.argv[1]) # 索引0是脚本名 else: print("未传递参数")
执行命令:
python3 script.py value1
注意:
- 需手动验证参数数量(
len(sys.argv)
) - 无类型校验,复杂场景不推荐
argparse
模块(官方推荐)
适用场景:复杂参数、类型校验、帮助文档生成
优势:自动生成--help
文档,支持类型/范围检查
import argparse parser = argparse.ArgumentParser(description='处理用户数据') parser.add_argument('--user', type=str, required=True, help='用户名') parser.add_argument('--age', type=int, default=20, help='年龄(默认20)') parser.add_argument('--verbose', action='store_true', help='启用详细输出') args = parser.parse_args() print(f"用户: {args.user}, 年龄: {args.age}, 详细模式: {args.verbose}")
执行命令:
python3 script.py --user Alice --age 25 --verbose
环境变量传参(os.environ
)
适用场景:敏感信息(如API密钥)、容器化部署
原理:从系统环境变量读取参数
import os api_key = os.environ.get('API_KEY') if not api_key: raise ValueError("未设置API_KEY环境变量") print("API密钥:", api_key)
配置环境变量:
export API_KEY="your-secret-key" # 临时生效 python3 script.py # 永久生效:写入~/.bashrc或/etc/environment
配置文件传参(JSON/YAML)
适用场景:多参数、跨环境配置
示例(JSON):
import json with open('config.json') as f: config = json.load(f) print("数据库地址:", config['db_host'])
配置文件config.json
:
{ "db_host": "192.168.1.100", "db_port": 5432, "debug_mode": true }
管道传参(sys.stdin
)
适用场景:脚本间数据流传递
原理:通过接收前序命令的输出
import sys data = sys.stdin.read().strip() # 读取管道数据 print("接收到的数据:", data)
执行命令:
echo "Hello from Pipe" | python3 script.py
安全与最佳实践
- 敏感数据保护:
- 永远不在命令行直接传递密码(会被
ps
命令捕获) - 使用环境变量或加密配置文件(如Vault)
- 永远不在命令行直接传递密码(会被
- 参数校验:
- 用
argparse
限制类型/范围(如type=int, choices=[1,2,3]
) - 对文件路径用
os.path.exists()
验证
- 用
- 容器化支持:
环境变量是Docker/K8s的最佳传参方式
- 错误处理:
- 捕获
argparse.ArgumentError
- 为必需参数设置
required=True
- 捕获
方法对比
方法 | 适用场景 | 安全性 | 易用性 |
---|---|---|---|
sys.argv |
简单临时任务 | 低 | |
argparse |
生产环境复杂参数 | 高 | |
环境变量 | 敏感信息/容器化 | 极高 | |
配置文件 | 多环境部署 | 中 | |
管道 | 脚本流水线 | 中 |
引用说明
- Python官方文档:
argparse
模块[^1] - Linux环境变量管理:IEEE POSIX标准[^2]
- 安全实践:OWASP安全配置指南[^3]
[^1]: Python argparse Documentation
[^2]: IEEE Std 1003.1-2017 Environment Variables
[^3]: OWASP Secure Configuration Guide