You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Python传递变量实际值到Shell脚本?

解决Python向Shell脚本传递变量值的问题

你的问题核心是传递了变量名的字面量,而非变量的实际值,同时subprocess的调用还有语法错误。下面一步步帮你修正:

先梳理你代码里的几个问题

  • 你把'Object_Id'和'Class_Name'作为字符串传给脚本,所以脚本接收到的就是这些字面量,不是变量存储的实际值
  • subprocess.check_output的参数列表里,'./execute.sh,存在语法错误(引号内多了个逗号),而且shell=True被错误地放在了命令参数列表里——它应该是函数的关键字参数,不属于命令本身
  • 你的Object_Id是整数类型,传递给Shell脚本时需要先转成字符串类型

推荐的安全解决方案(无注入风险)

这种方式不使用shell=True,直接把命令和参数拆分成列表传递,是subprocess官方推荐的安全写法:

import subprocess

Object_Id = 12
Class_Name = 'My_Class'
Folder_Path = '/My_Folder'

# 把变量的实际值作为列表元素传递,整数要转成字符串
output = subprocess.check_output(['./execute.sh', str(Object_Id), Class_Name])
# 将字节流输出解码为可读的字符串
print(output.decode('utf-8'))

你的execute.sh不需要修改,运行后会输出:

12
My_Class

另一种写法(使用shell=True,注意安全风险)

如果你一定要用shell=True,可以把命令拼接成一个字符串,直接把变量值嵌入进去:

import subprocess

Object_Id = 12
Class_Name = 'My_Class'
Folder_Path = '/My_Folder'

# 用f-string把变量值拼接到命令字符串中
output = subprocess.check_output(f'./execute.sh {Object_Id} {Class_Name}', shell=True)
print(output.decode('utf-8'))

⚠️ 注意:这种写法如果变量值来自不可信输入(比如用户提交的内容),可能会引发Shell注入攻击,所以尽量优先使用第一种方式。

为什么原来的代码不行?

你原来的代码相当于在Shell里直接敲./execute.sh Object_Id Class_Name,脚本自然会输出这两个字面量字符串,而不是你Python变量里存储的12和My_Class。

内容的提问来源于stack exchange,提问作者Subrata Fouzdar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:33:07