Python脚本参数传递与Shell调用实战指南
本文详细演示在 Python 工作流中处理外部输入的三种核心方案。通过命令行读取位置参数、构建结构化解析器,以及借助 Shell 脚本桥接系统变量与 Python 函数调用。掌握上述代码与终端输出对照,即可按任务复杂度选择稳定的参数传递与跨语言交互方式。
Python 参数传递与 Shell 交互实战方案
第1步:使用 sys.argv 接收基础位置参数
目的:快速获取按顺序传入的命令行输入,适用于轻量级脚本的数据注入。
入口:终端执行命令:python python_test.py [参数A] [参数B]
动作:将以下代码保存至 python_test.py,运行后脚本将自动把第一个元素识别为程序名,其余元素按索引映射为传入值。
import sys
print("传入参数的总长度为:", len(sys.argv))
print("type:", type(sys.argv))
print("function name:", sys.argv[0])
try:
print("第一个传入的参数为:", sys.argv[1])
print("第二个传入的参数为:", sys.argv[2])
except Exception as e:
print("Input Error:", e)
重要参数:sys.argv[0](当前执行文件路径/名称)、sys.argv[1:](用户传入序列)、len(sys.argv)(参数总数,含文件名本身计为1)。
完成状态:终端正确打印参数总长度、数据类型及具体数值,未触发 IndexError 即表示传递链路畅通。

第2步:使用 argparse 构建结构化参数解析器
目的:提供带类型校验、默认值、简写别名与帮助信息的规范化命令行接口,降低调用方的出错概率。
入口:终端执行命令:python test.py --name Alice --age 25
动作:实例化 ArgumentParser 并逐个注册字段,最后通过 parse_args() 自动完成类型转换与赋值。
import argparse
parser = argparse.ArgumentParser(description='argparse testing')
parser.add_argument('--name','-n',type=str, default="bk",required=True,help="programmer's name")
parser.add_argument('--age','-a',type=int, default=35,help='programmer age')
parser.add_argument('--sex','-s',type=str, default='male')
parser.add_argument('--favorite','-f',type=str, nargs="+",required=False,help="programmer favorites")
args = parser.parse_args()
print(args.name)
print(args.age)
print(args.sex)
print(args.favorite)
重要参数:--xx/-x(完整别名/简写)、type(自动转换目标类型)、default(未传入时的后备值)、nargs(支持数量,+"表示接收1个或多个)、required(是否强制输入)。
完成状态:终端展示各字段解析结果,输入 -h 可正常调出使用说明,无需手动编写正则或判断逻辑。



第3步:借助 Shell 脚本桥接系统变量与 Python 函数
目的:在定时任务或自动化流水线中,通过 Shell 传递环境变量并直接调用 Python 内部函数,实现跨语言数据流转。
入口:准备 shell_test.sh 与目标 python_test.py,赋予执行权限后通过 ./shell_test.sh arg 触发。
动作:分为两种常用模式:一是将 Shell 变量拼接到 Python 启动命令后作为位置参数传入;二是使用 python -c 内联执行语句直接导入模块并调用函数。
模式一:Shell 变量传递至 sys.argv
#!/bin/bash
para1=$1
para2=$2
python python_test.py $para1 $para2
重要参数:$1/$2(Shell positional parameters)、动态拼接字符串确保空格不截断。
完成状态:终端输出与直接运行 Python 脚本一致,说明中间层变量传递已成功转发。

模式二:通过 python -c 直接调用函数
无参数调用:
#!/bin/bash
python -c 'import python_test;print(python_test.fun1())'

带参数调用:
#!/bin/bash
para=$1
python -c "import python_test;print(python_test.fun2('${para}'))"

多返回值分割处理:
#!/bin/bash
para=$1
ALL_RESULTS=$(python -c "import python_test;print(python_test.fun1(),python_test.fun2('${para}'))")
RESULTS_fun1=$(echo $ALL_RESULTS | cut -d' ' -f1)
RESULTS_fun2=$(echo $ALL_RESULTS | cut -d' ' -f2)
echo fun1方法的返回结果为:$RESULTS_fun1
echo fun2方法的返回结果为:$RESULTS_fun2
重要参数:$(...) (命令替换捕获标准输出)、cut -d' ' -fN(以空格为分隔符提取第N段)。
完成状态:终端分别打印两个函数的返回值,未出现错位或空行即表示文本切割逻辑成立。

以上就是 Python脚本传参 与 Shell 交互方案的详细内容,更多关于 Python参数处理与自动化运维的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













