我想创建一个运行PyPy的进程。我试过以下几种方法,效果很好:
import os
os.chdir('<path-to-pypy-download>/bin/')
os.execl('pypy', 'pypy', '-c', 'print "Hi!"')但是,当我将chdir移除为:
import os
os.execl('<path-to-pypy-download>/bin/pypy', 'pypy', '-c', 'print "Hi!"')我得到:
debug: WARNING: Library path not found, using compiled-in sys.path.
debug: WARNING: 'sys.prefix' will not be set.
debug: WARNING: Make sure the pypy binary is kept inside its tree of files.
debug: WARNING: It is ok to create a symlink to it from somewhere else.
debug: OperationError:
debug: operror-type: ImportError
debug: operror-value: No module named os请注意,有人知道如何在不改变工作目录的情况下生成PyPy进程吗?
发布于 2014-12-05 20:10:17
这可能是不正确的(在这种情况下,我将删除它),但我非常肯定,您所需要做的就是:
os.execl('<path-to-pypy-download>/bin/pypy',
'<path-to-pypy-download>/bin/pypy', '-c', 'print "Hi!"')换句话说,传递path的完整路径。
为什么?好的,当PyPy启动时,它必须使用(RPython/编译到C等效的) sys.argv[0]来查找自定义stdlib的路径。它还能有什么用?当然,这只是从传递给解释器的char *argv[]函数的main参数中复制出来的。当你让操作系统为你启动一个程序时,它会把完整的路径放进去。但是,当您使用execl显式地设置它时,它只会复制您给它的任何东西。
实际上,它比这更复杂一些--它做了一个readlink (允许符号链接)和一个abspath (允许自己通过相对路径运行),就像您在第一个例子中所做的那样。但基本的想法是一样的。
另外,您可能需要考虑使用一个完全安装的PyPy,而不是一个运行出的构建树PyPy,在这种情况下,它的sys.prefix将被正确地设置,所以它不需要这样做。
https://stackoverflow.com/questions/27323264
复制相似问题