从不同的实例执行另一个Python实例

时间:2012-01-14 15:39:03

标签: python exec

我目前有一个脚本由一个附带自己的Python解释器的程序执行。 此版本不包含我需要的库,因此我使用os.exec对本地安装的2.7实例执行第二个脚本。

然而,第二个脚本在手动执行时效果很好,并且没有定义PYTHONPATH。如果我在执行包装器时记录PYTHONPATH的输出,并且在加载第二个脚本时,它们都将PYTHONPATH初始化为原始解释器,这也恰好是2.6实例。 这显然让我相信我有一些环境变量被传递,我没有预料到,此外在其他2个系统上,这个设置按预期工作100%,而在这一个系统上,这种行为正在发生。 有没有更简洁的方法我可以创建一个包装来调用第二个脚本?如果不是,我怎么能避免这种不必要的env变量传递。

2 个答案:

答案 0 :(得分:6)

os.exec*命令有很多变种:

execl(file, *args)
execle(file, *args, env)
execlp(file, *args)
execlpe(file, *args, env)
execv(path, args)
execve(path, args, env)
execvp(file, args)
execvpe(file, args, env)
  • l个变体使用*argsv变体使用args
  • p变体使用PATH环境变量来查找file
  • e varients替换环境。非e变体使用env 当前进程。

您可以使用其中一个e变体(例如os.execle)来控制传递给新流程的环境变量。

答案 1 :(得分:2)

您可能需要查看virtualenv,它允许您创建一个沙箱,您可以在其中安装所有必需的库。