在Python中是否有通用的方法来找出当前正在执行的文件的路径?

失败的方法

Path = os.path.abspath(os.path.dirname(sys.argv[0]))

如果您正在从另一个目录中的另一个Python脚本运行,例如在2.x中使用execfile,则这将不起作用。

Path = os.path.abspath(os.path.dirname(__file__))

我发现这在以下情况下不起作用:

Py2exe没有__file__属性,尽管有一个变通方法 当使用execute()从IDLE运行代码时,在这种情况下没有__file__属性 在Mac OS X v10.6(雪豹)上,我得到NameError:未定义全局名称“__file__”

测试用例

目录树

C:.
|   a.py
\---subdir
        b.py

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

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

相关的(但这些答案是不完整的)

查找当前运行文件的路径 当前文件的路径取决于我如何执行程序 如何知道Python中运行脚本的路径? 将directory更改为Python脚本所在目录


当前回答

简单的回答是,没有保证的方法可以获得您想要的信息,但是有一些启发式方法在实践中几乎总是有效的。你可能会看看如何在C中找到可执行文件的位置。它从C语言的角度讨论了这个问题,但是所提出的解决方案很容易转化为Python。

其他回答

import os
current_file_path=os.path.dirname(os.path.realpath('__file__'))

只需添加以下内容:

from sys import *
path_to_current_file = sys.argv[0]
print(path_to_current_file)

Or:

from sys import *
print(sys.argv[0])

主要思想是,有人会运行你的python代码,但你需要获得离python文件最近的文件夹。

我的解决方案是:

import os
print(os.path.dirname(os.path.abspath(__file__)))

与 os.path.dirname (os.path.abspath (__file__)) 你可以用它来保存照片,输出文件,等等

简单的回答是,没有保证的方法可以获得您想要的信息,但是有一些启发式方法在实践中几乎总是有效的。你可能会看看如何在C中找到可执行文件的位置。它从C语言的角度讨论了这个问题,但是所提出的解决方案很容易转化为Python。

如果代码来自一个文件,您可以获得它的全名

sys._getframe().f_code.co_filename

还可以将函数名检索为f_code.co_name