这可能看起来像一个新手问题,但它不是。一些常见的方法在所有情况下都不起作用:
sys.argv [0]
这意味着使用path = os.path.abspath(os.path.dirname(sys.argv [0])),但如果你从另一个目录中的另一个Python脚本运行,这不工作,这可能发生在现实生活中。
__文件__
这意味着使用path = os.path.abspath(os.path.dirname(__ file__)),但我发现这不工作:
> py2exe没有__file__属性,但有一个workaround
>当使用execute()从IDLE运行时,没有__file__属性
> OS X 10.6我得到NameError:全局名称’__file__’没有定义
与不完全答案的相关问题:
我正在寻找一个通用的解决方案,将工作在所有上述用例。
更新
这里是测试用例的结果:
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
a.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()
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()
树
C:.
| a.py
\---subdir
b.py