【问题标题】:Python Subprocess Popen Prepare Python Path under LinuxPython Subprocess Popen 在 Linux 下准备 Python 路径
【发布时间】:2017-06-10 21:33:21
【问题描述】:

我正在尝试通过 subprocess.Popen 调用在 Ubuntu 下为另一个脚本准备我的 pythonpath。对 Python estimatekeleton.py 的调用确实可以正常工作。但是,由于它需要准备好 python 路径,所以它不能完全正确地工作,因为它找不到需要导入的其他一些脚本。 export PYTHONPATH 命令确实适用于 commands.getoutput。但是,使用 commands.getoutput,estimateskeleton 脚本仍然无法工作/找不到应该导入的其他文件。我尝试通过 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]

【问题讨论】:

    标签: python linux python-2.7 subprocess popen


    【解决方案1】:

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

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

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

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

    所以您的下一个 python 命令将使用 PYTHONPATH 中添加的文件夹运行

    【讨论】:

    • 由于我们使用的是shell=True,更简单的方法是直接发出一个命令来更新外壳启动的环境变量:PYTHONPATH=$PYHTONPATH:something_else command args
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-14
    • 2014-09-13
    • 2013-12-09
    • 2011-09-05
    • 2013-12-01
    • 2011-01-19
    • 2016-11-08
    相关资源
    最近更新 更多