Python 子流程未保留所有环境变量

Python 子流程未保留所有环境变量,python,shell,subprocess,tcsh,Python,Shell,Subprocess,Tcsh,我有一个tcsh shell脚本,它设置了所有必要的环境,包括PYTHONPATH,然后在它的末尾运行一个可执行文件。我还有一个python脚本,作为输入发送到shell脚本。因此,当从终端运行时,以下操作非常有效: shell脚本的路径python脚本的路径 现在,当我想从子流程中执行相同的操作时,就会出现问题。python脚本无法运行,因为它找不到许多应该通过shell脚本设置的模块。显然,与运行子进程的父环境或shell脚本本身相比,PYTHONPATH最终会丢失许多路径!子流程似乎不考虑

我有一个tcsh shell脚本,它设置了所有必要的环境,包括
PYTHONPATH
,然后在它的末尾运行一个可执行文件。我还有一个python脚本,作为输入发送到shell脚本。因此,当从终端运行时,以下操作非常有效:

shell脚本的路径
python脚本的路径

现在,当我想从子流程中执行相同的操作时,就会出现问题。python脚本无法运行,因为它找不到许多应该通过shell脚本设置的模块。显然,与运行子进程的父环境或shell脚本本身相比,
PYTHONPATH
最终会丢失许多路径!子流程似乎不考虑shell脚本设置的环境

我已经试过了各种各样的方法,但都没有用

cmd=[shell脚本路径,py脚本路径]
process=subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE,env=os.environ.copy())
如果不提供env也没有什么区别


知道怎么解决吗

知道子进程继承了所有父进程环境,它们应该在同一环境下运行,使shell脚本不设置任何环境,修复了它


这解决了环境被保留的问题,但现在的问题是,进程只是挂起!(直接从shell运行时不会发生这种情况)

在启动调用Popen的Python脚本之前,您是否尝试过说
export PYTHONPATH
?这将使子进程继承该变量。Popen运行的环境已包含所有这些路径!或者你是想从壳牌公司出口蟒蛇?shell脚本设置了环境本身。无论我做什么,我都会不断收到导入程序和错误,例如
“导入站点”失败;使用-v进行回溯