我有一些简单的bash脚本,我想在python中翻译。我需要在使用子进程调用外部程序之前定义一些bash环境变量。特别是我需要加载模块环境。原始的bash看起来像这样
#!/bin/bash
source /etc/profile.d/modules.sh
module purge
module load intel
./my_code
my_code
,但是如何将module
定义的变量传递给shell?编辑:
我第一次尝试转换上面的脚本是
#!/usr/bin/python -tt
import subprocess
subprocess.call("source /etc/profile.d/modules.sh",shell=True)
subprocess.call("module purge",shell=True)
subprocess.call("module load intel",shell=True)
subprocess.call("./mycode",shell=True)
但这失败了,因为环境变量(我认为是LIBRARY_PATH和PATH和C_INCLUDE)在子进程启动的shell中被修改,但是这个shell死了,后续shell不会继承这些变量。所以问题是:如何启动模块命令,然后使用os.environ?
保存相关变量答案 0 :(得分:1)
您可以使用多行字符串,以便在同一个shell进程中修改环境:
from subprocess import check_call
check_call("""
source /etc/profile.d/modules.sh
module purge
module load intel
./my_code
""", shell=True, executable="/bin/bash")
答案 1 :(得分:0)
import os
os.environ
是环境变量的词典(导出的shell变量)