Linux下Python子进程Popen准备Python路径

Linux下Python子进程Popen准备Python路径,python,linux,python-2.7,subprocess,popen,Python,Linux,Python 2.7,Subprocess,Popen,我正试图在Ubuntu下通过subprocess.Popen调用为另一个脚本准备pythonpath。对Python estimateskeleton.py的调用工作正常。然而,由于它需要准备python路径,所以它不能完全正确地工作,因为它找不到需要导入的其他脚本。export PYTHONPATH命令不能与commands.getoutput一起使用。但是,对于commands.getoutput,EstimateSelectron脚本仍然无法工作/无法找到应导入的其他文件。我尝试通过sub

我正试图在Ubuntu下通过subprocess.Popen调用为另一个脚本准备pythonpath。对Python estimateskeleton.py的调用工作正常。然而,由于它需要准备python路径,所以它不能完全正确地工作,因为它找不到需要导入的其他脚本。export PYTHONPATH命令不能与commands.getoutput一起使用。但是,对于commands.getoutput,EstimateSelectron脚本仍然无法工作/无法找到应导入的其他文件。我尝试通过subprocess.Popen导出PYTHONPATH时出现错误2:

OSError: [Errno 2] No such file or directory
我无法使用搜索功能找到合适的解决方案。所以我希望这个板的一个更高级的用户能帮助我

致意

import subprocess as sub
import os
import commands

proc = sub.Popen(["export", "PYTHONPATH=\"${PYTHONPATH}:/media/sf_myFolder/Scripts/code/\""],
                  stdout=sub.PIPE,
                  stderr=sub.STDOUT)

print proc.communicate()[0]

proc2 = sub.Popen(["python", "estimateskeleton.py"],
                  stdout=sub.PIPE,
                  stderr=sub.STDOUT)

print proc2.communicate()[0]

您的第一个
Popen
命令将在没有
shell=True
的情况下工作,因为
export
是一个内置的shell

但是,这并不能解决这个问题,因为由
Popen
生成的第二个进程不知道死进程中设置的前一个变量

因此,不必运行第一个无用的
Popen
,您可以使用
os.putenv()
将路径添加到现有的
PYTHONPATH
,如下所示:

os.putenv("PYTHONPATH",os.pathsep.join([os.getenv("PYTHONPATH",""),"/media/sf_myFolder/Scripts/code"]))

因此,您的下一个python命令是在
PYTHONPATH

中使用添加的文件夹运行的,因为我们使用的是
shell=True
,更简单的方法是直接发出一个命令,仅为shell启动时更新env变量:
PYTHONPATH=$PYHTONPATH:something\u else命令args