我可以在当前shell中从python脚本运行shell命令吗

我可以在当前shell中从python脚本运行shell命令吗,python,shell,Python,Shell,我有一个python脚本,它调用两个不同的shell脚本。第一个脚本设置第二个脚本所需的一些环境变量。python代码具有以下结构: import subprocess subprocess.call(["bash", "a.sh"]) #a.sh sets env_var1 subprocess.call(["bash", "b.sh"]) #b.sh reads env_var1 因为脚本a.sh和b.sh在不同的shell中运行,所以上面的代码没有做必要的工作。 我想知道我们能否在当前s

我有一个python脚本,它调用两个不同的shell脚本。第一个脚本设置第二个脚本所需的一些环境变量。python代码具有以下结构:

import subprocess
subprocess.call(["bash", "a.sh"]) #a.sh sets env_var1
subprocess.call(["bash", "b.sh"]) #b.sh reads env_var1
因为脚本
a.sh
b.sh
在不同的shell中运行,所以上面的代码没有做必要的工作。
我想知道我们能否在当前shell本身中从python执行这些shell脚本

您可以使用这一行在python
os.system('command to run here')

在您的情况下,它将类似于:

import os

os.system('./a.sh')
os.system('./b.sh')

可能的副本。简短回答:看来你不能。解决方法是合并脚本并在一个进程中运行。可能是的副本,但如何在一个
os.system
中运行两个脚本os.system不会离开当前shell,因此,一个接一个地运行环境变量将确保在第一个脚本中创建环境变量,并在第二个脚本中访问环境变量。下面是我的python脚本
path1=r'd1/xyz.csh'path2=r'd2/abc.csh'os.system(“catd1/xyz.csh”)os.system(path1)os.system(“echo$Env_var_1 sys1”)os.system(path2)
。而
xyz.csh
Env_var_1=“var one by xyz”Env_var_2=“var two by xyz”echo$Env_var_1
。而
abc.csh
echo$Env_var_2,“在abc中”
在创建变量时使用导出问题在于
os.system
实际上产生了一个子进程,子进程在其中运行。它对
os.system
的每次调用都是如此,这意味着您每次都会得到一个“新的”进程/子shell。只需尝试
os.system(“export MYVAR=someval;echo$MYVAR”)
然后再
os.system(“echo$MYVAR”)
,或者直接连续调用
os.system(“echo$$”