运行时向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
相关产品推荐
相关产品推荐

