我在从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()使用调用脚本环境,所以它应该是一样的。我在这里缺少什么?
答案 0 :(得分:2)
os.execl(py_path, py_path, '/home/jdoe/run.py')
来自文档:
os.execl(path,arg0,arg1,...)¶
arg0是可执行文件的调用名称视图。通过将run.py
路径放在该位置,您可以防止它出现在arg1中 - 这是第一个需要常规参数的位置。
您的错误可以从shell重新创建,如下所示:
(exec -a /home/jdoe/run.py /home/jdoe/python/1509/bin/python)
...将/home/jdoe/run.py
传递为arg0而不是arg1。但是,默认情况下,shell将始终传递它作为arg0调用的可执行文件的名称,从而使该可执行文件知道调用它的名称。