Python脚本参数传递与Shell调用实战指南

落日邮差
落日邮差
发布时间:2026-10-12 | 3人浏览过
原创

本文详细演示在 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 即表示传递链路畅通。

终端显示sys.argv解析后的参数总长度、类型及具体值的运行结果
运行后终端输出的参数解析结果,可直接核对索引与数值对应关系

第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 可正常调出使用说明,无需手动编写正则或判断逻辑。

使用完整参数名传入argparse解析结果的终端截图
完整参数名传入后的解析输出,验证类型转换与默认值覆盖逻辑
使用短参数名传入argparse解析结果的终端截图
简写参数传入结果,证明别名机制已生效
多值参数传入argparse解析结果的终端截图
多参数连续传入测试,确认 nargs 集合解析功能正常

第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 脚本一致,说明中间层变量传递已成功转发。

Shell脚本向Python传递参数并解析成功的终端结果
Shell 传入参数经 Python 解析后的最终输出,验证链路贯通

模式二:通过 python -c 直接调用函数

无参数调用:

#!/bin/bash
python -c 'import python_test;print(python_test.fun1())'
Shell调用无参数Python函数的终端返回结果
无参函数调用结果,确认模块导入与函数执行正常

带参数调用:

#!/bin/bash
para=$1
python -c "import python_test;print(python_test.fun2('${para}'))"
Shell向Python有参函数传参并返回结果的终端截图
传入变量后函数拼接输出,验证单引号双引号混用转义正确

多返回值分割处理:

#!/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段)。

完成状态:终端分别打印两个函数的返回值,未出现错位或空行即表示文本切割逻辑成立。

Shell截取多返回值分别打印的终端对比结果
批量返回值的分段截取效果,可用于简单流水线的数据分发

以上就是 Python脚本传参 与 Shell 交互方案的详细内容,更多关于 Python参数处理与自动化运维的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表