将bash脚本转换为python
我有一些简单的bash脚本,想把它们转换成python。首先,我需要在调用外部程序之前定义一些bash环境变量,特别是需要加载一个模块环境。原来的bash脚本大概是这样的:
#!/bin/bash
source /etc/profile.d/modules.sh
module purge
module load intel
./my_code
我想用subprocess来调用my_code,但是我该如何把module定义的变量传递给shell呢?
编辑:
我第一次尝试把上面的脚本转换成python是:
#!/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)
但是这个尝试失败了,因为在subprocess启动的shell中,环境变量(我认为是LIBRARY_PATH、PATH和C_INCLUDE)被修改了,但这个shell结束后,这些变量不会被后续的shell继承。所以问题是:我该如何启动一个模块命令,然后用os.environ保存相关的变量呢?
相关问题:
2 个回答
0
import os 是一行代码,用来引入一个叫做“os”的模块。
os.environ 是一个字典,里面存放的是环境变量,也就是一些在操作系统中设置的变量,这些变量通常是在命令行中导出的。
1
你可以使用多行字符串,这样环境就可以在同一个命令行进程中被修改:
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")