将bash脚本翻译为python

时间:2014-03-19 14:14:54

标签: python bash scripting subprocess

我有一些简单的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?

保存相关变量

2 个答案:

答案 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")

另见Calling the “source” command from subprocess.Popen

答案 1 :(得分:0)

import os

os.environ是环境变量的词典(导出的shell变量)