2012-01-14 117 views
3

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

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

+0

为什么你打包一个不适合你需求的Python解释器?如果你不得不依赖预装的Python版本,那么在你的包中包含一个Python解释器似乎没有意义。 – 2012-01-14 15:42:53

+0

我还没有创建原始程序,因此无法控制所包含的版本。这只是扩展功能所需的一项工作 – Draineh 2012-01-14 15:50:35

+0

您是否尝试过使用'os.execle'来显式传递所需的环境变量? – unutbu 2012-01-14 16:06:20

回答

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一些变体更换环境。非e变体使用当前过程的 env。

您可以使用e变种之一,如os.execle,控制传递给新进程的环境变量。

+0

谢谢。我用了; os.execve(Pythonbinary,args,{})其中{}不会将env变量传递给新脚本 – Draineh 2012-01-14 16:33:10

2

您可能想看看virtualenv,它允许您创建一个基本上可以安装所有必需库的沙箱。

+0

谢谢。虽然上面的答案已经解决了我的问题,但我一定会将其加入书签并在某个时候仔细阅读,然后快速扫描它,以后可以看到它的一些可能用途。 – Draineh 2012-01-14 18:09:22

相关问题