这似乎是一个新手问题,但事实并非如此。一些通用方法并非在所有情况下都有效:
sys.argv [0]
这意味着使用path = os.path.abspath(os.path.dirname(sys.argv[0]))
,但是如果您是从另一个目录中的另一个Python脚本运行的,则此方法不起作用,并且这可能在现实生活中发生。
__文件__
这意味着使用path = os.path.abspath(os.path.dirname(__file__))
,但是我发现这不起作用:
py2exe
没有__file__
属性,但是有一种解决方法- 当您从IDLE运行时,
execute()
没有__file__
属性 - 我得到的OS X 10.6
NameError: global name '__file__' is not defined
答案不完整的相关问题:
我正在寻找一种通用解决方案,该解决方案可以在所有上述用例中使用。
更新资料
这是一个测试用例的结果:
python a.py的输出(在Windows上)
a.py: __file__= a.py
a.py: os.getcwd()= C:\zzz
b.py: sys.argv[0]= a.py
b.py: __file__= a.py
b.py: os.getcwd()= C:\zzz
py
#! /usr/bin/env python
import os, sys
print "a.py: sys.argv[0]=", sys.argv[0]
print "a.py: __file__=", __file__
print "a.py: os.getcwd()=", os.getcwd()
print
execfile("subdir/b.py")
subdir / b.py
#! /usr/bin/env python
import os, sys
print "b.py: sys.argv[0]=", sys.argv[0]
print "b.py: __file__=", __file__
print "b.py: os.getcwd()=", os.getcwd()
print
树
C:.
| a.py
\---subdir
b.py
NameError: global name '__file__' is not defined
使用文件,但这不在IDLE内。认为__file__
仅在模块内部定义。