【发布时间】:2014-03-03 18:28:32
【问题描述】:
我的当前目录C:\test 中有一个python 脚本foo.py。
这里是代码。
import sys
print('sys.path:', sys.path)
print('sys.argv:', sys.argv)
当我将它作为脚本执行时,我会看到这个输出。
C:\test>python foo.py
sys.path: ['C:\\test', 'C:\\Windows\\system32\\python34.zip', 'C:\\Python34\\DLLs', 'C:\\Python34\\lib', 'C:\\Python34', 'C:\\Python34\\lib\\site-packages']
sys.argv: ['foo.py']
但是当我将它作为一个模块执行时,我看到了这个输出。
C:\test>python -m foo
sys.path: ['', 'C:\\Windows\\system32\\python34.zip', 'C:\\Python34\\DLLs', 'C:\\Python34\\lib', 'C:\\Python34', 'C:\\Python34\\lib\\site-packages']
sys.argv: ['C:\\test\\foo.py']
当我将程序作为模块执行时,为什么sys.path[0] 变成空字符串?
http://docs.python.org/3.4/library/sys.html#sys.path 的文档提到了这一点:
在程序启动时初始化,此列表的第一项, path[0],是包含脚本的目录,用于 调用 Python 解释器。如果脚本目录不是 可用(例如,如果解释器是交互式调用的,或者如果 脚本是从标准输入中读取的),path[0] 是空字符串, 它指示 Python 首先搜索当前目录中的模块。
所以如果脚本目录不可用,那么只有将sys.path[0] 设置为''。但在我的情况下,即使在执行python -m foo 时,脚本目录foo 显然是可用的。所以它不应该根据文档将sys.path[0] 设置为''。相反,它应该将其设置为'C:\\test'。
是文档中的错误还是Python解释器中的错误或我理解的错误?
【问题讨论】:
-
你在哪里看到空字符串?在这两种情况下,
sys.path都有一个 非空 第一个元素。区别在于它是否包含完整路径或相对路径。 -
@Bakuriu 您在哪里看到非空的第一个元素?您在此输出中看不到空字符串:
sys.path: ['', 'C:\\Windows\\system32\\python34.zip', 'C:\\Python34\\DLLs', 'C:\\Python34\\lib', 'C:\\Python34', 'C:\\Python34\\lib\\site-packages']? -
触摸。在读取输出时,我将
sys.argv误读为sys.path。
标签: python python-3.x