创建pypy进程
问题描述:
我想创建一个运行PyPy的进程。我试过以下,它的工作原理:创建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进程不改变工作目录?
答
这可能是不正确的(在这种情况下,我会删除它),但我敢肯定,所有你需要做的是:
os.execl('<path-to-pypy-download>/bin/pypy',
'<path-to-pypy-download>/bin/pypy', '-c', 'print "Hi!"')
换句话说,通过对全路径arg0
as well as path
。
为什么?那么,当PyPy启动时,它必须使用(RPython /编译为C的等价物)sys.argv[0]
来查找自定义stdlib的路径。还有什么可以使用的?当然这只是从char *argv[]
参数中复制传递给解释器的main
函数。当你让操作系统为你启动一个程序时,它会把完整的路径放在那里。但是,当你明确地将其设置为execl
时,它只会复制你给它的任何东西。
它实际上是一个位复杂得多,这 - 它确实readlink
(允许符号连接)和abspath
(允许自己被相对路径,如在第一个例子中运行)。但基本的想法是一样的。
作为一个方面说明,您可能想要考虑使用完全安装的PyPy,而不是使用构建树PyPy,在这种情况下,它的sys.prefix
将被正确设置,因此它不需要这个。
您是否尝试过为'arg0'和'path'传递完整路径?因为大概它使用(sys.argv [0])的(RPython /编译为C的等价物)来查找它的库路径。 – abarnert 2014-12-05 20:08:56