“python myscript”在shell中运行,但os.execl(“python”,“myscript”)在Python中失败 - 为什么?

时间:2017-02-21 13:18:09

标签: python unix

我在从python启动可执行文件时遇到问题。我把它归结为:

#!/usr/bin/python
import os
py_path='/home/jdoe/python/1509/bin/python'
os.execl( py_path, '/home/jdoe/run.py' )

这失败了:

Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
ImportError: No module named site

我尝试将PYTHONHOME添加到脚本中并遇到其他错误,但我的问题是:为什么脚本在以下情况下失败:

/home/jdoe/python/1509/bin/python /home/jdoe/run.py

作品?

os.exec()使用调用脚本环境,所以它应该是一样的。我在这里缺少什么?

1 个答案:

答案 0 :(得分:2)

正确用法

os.execl(py_path, py_path, '/home/jdoe/run.py')

来自文档:

  

os.execl(path,arg0,arg1,...)¶

arg0是可执行文件的调用名称视图。通过将run.py路径放在该位置,您可以防止它出现在arg1中 - 这是第一个需要常规参数的位置。

在shell中重现

您的错误可以从shell重新创建,如下所示:

(exec -a /home/jdoe/run.py /home/jdoe/python/1509/bin/python)

...将/home/jdoe/run.py传递为arg0而不是arg1。但是,默认情况下,shell将始终传递它作为arg0调用的可执行文件的名称,从而使该可执行文件知道调用它的名称。