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

运行时向Unix Shell脚本传递Python变量的解决方案咨询

解决方案

问题根源

你的代码存在两个核心问题:

  • Shell语句中cat var是读取名为var的实体文件,而非读取变量var对应路径的文件,正确写法应为cat "$var"
  • Python层定义的var变量没有被传递到Shell执行的上下文环境中,同时原有os.system的字符串格式化写法存在语法错误,% script被放在了单引号外侧

方案1:变量直接拼接注入

适合路径无特殊符号的简单场景,注意对变量内的单引号做转义避免Shell注入风险:

import os

var = '/d/demo/f.txt'
# 转义路径中的单引号
escaped_var = var.replace("'", "'\\''")
script = f"""
( 
echo "From : xyz"
echo "To : xyz"
cat '{escaped_var}'
) | sendmail -t 
"""
os.system(f"bash -c '{script}'")

方案2:环境变量传递(推荐)

使用subprocess替代os.system,通过环境变量传递值,无需处理转义,路径包含空格、特殊符号时也可正常运行,安全性更高:

import subprocess
import os

var = '/d/demo/f.txt'
script = """
( 
echo "From : xyz"
echo "To : xyz"
cat "$var"
) | sendmail -t 
"""
# 继承现有系统环境变量,同时注入自定义var变量
subprocess.run(
    ['bash', '-c', script],
    env={**os.environ, 'var': var},
    check=True
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:15:03