首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建pypy过程

创建pypy过程
EN

Stack Overflow用户
提问于 2014-12-05 19:29:09
回答 1查看 328关注 0票数 1

我想创建一个运行PyPy的进程。我试过以下几种方法,效果很好:

代码语言:javascript
复制
import os
os.chdir('<path-to-pypy-download>/bin/')
os.execl('pypy', 'pypy', '-c', 'print "Hi!"')

但是,当我将chdir移除为:

代码语言:javascript
复制
import os
os.execl('<path-to-pypy-download>/bin/pypy', 'pypy', '-c', 'print "Hi!"')

我得到:

代码语言:javascript
复制
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进程吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-05 20:10:17

这可能是不正确的(在这种情况下,我将删除它),但我非常肯定,您所需要做的就是:

代码语言:javascript
复制
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将被正确地设置,所以它不需要这样做。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27323264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档