首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python sys.executable为空

Python sys.executable为空
EN

Stack Overflow用户
提问于 2016-09-01 00:28:25
回答 1查看 12.4K关注 0票数 13

我正在测试在os.execve和虚拟环境中做一些恶作剧。如果我用另一个Python子进程替换当前的python进程,就会遇到sys.executable为空的问题。

下面的示例显示了发生了什么(在python shell中运行此命令):

代码语言:javascript
复制
import os, sys
print(sys.executable) # works this time
os.execve("/usr/bin/python", [], {}) # drops me into a new python shell
import sys # yes, again
print(sys.executable) # is empty

我在python shell中运行上述命令的完整输出:

代码语言:javascript
复制
 lptp [ tmp ]: python
Python 2.7.10 (default, Oct 14 2015, 16:09:02) 
[GCC 5.2.1 20151010] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os, sys
>>> print(sys.executable) # works this time
/usr/bin/python
>>> os.execve("/usr/bin/python", [], {}) # drops me into a new python shell
Python 2.7.10 (default, Oct 14 2015, 16:09:02) 
[GCC 5.2.1 20151010] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys # yes, again
>>> print(sys.executable) # is empty

>>>

sys.executable为空给我带来了问题,最值得注意的是platform.libc_ver()失败,因为sys.executable为空:

代码语言:javascript
复制
>>> import platform
>>> platform.libc_ver()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/platform.py", line 163, in libc_ver
    f = open(executable,'rb')
IOError: [Errno 21] Is a directory: '/tmp'

请注意,上面的示例是在调用os.execve(...)之后运行的

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-01 00:40:40

Python依赖于argv[0]和几个环境变量来确定sys.executable。当您传递一个空的argv和环境时,Python不知道如何确定它的路径。至少,您应该提供argv[0]

代码语言:javascript
复制
os.execve('/usr/bin/python', ['/usr/bin/python'], {})
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39254684

复制
相关文章

相似问题

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