【发布时间】:2011-02-07 14:23:43
【问题描述】:
这似乎是一个新手问题,但事实并非如此。一些常见的方法并不适用于所有情况:
sys.argv[0]
这意味着使用path = os.path.abspath(os.path.dirname(sys.argv[0])),但如果您从另一个目录中的另一个 Python 脚本运行,这将不起作用,这可能会发生在现实生活中。
__file__
这意味着使用path = os.path.abspath(os.path.dirname(__file__)),但我发现这不起作用:
-
py2exe没有__file__属性,但有 a workaround - 当您从 IDLE 和
execute()运行时,没有__file__属性 -
Mac OS X v10.6(雪豹)我得到
NameError: global name '__file__' is not defined
答案不完整的相关问题:
- Find path to currently running file
- Path to current file depends on how I execute the program
- How can I know the path of the running script in Python?
- Change directory to the directory of a Python script
我正在寻找一种通用解决方案,它适用于上述所有用例。
更新
这是一个测试用例的结果:
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()
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
【问题讨论】: