将bash脚本转换为python

0 投票
2 回答
1018 浏览
提问于 2025-04-17 22:58

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

另外可以参考 从 subprocess.Popen 调用 “source” 命令

撰写回答