我如何获得当前正在执行的文件的路径和名称?
我有脚本调用其他脚本文件,但我需要获取当前在该进程中运行的文件的文件路径。
例如,假设我有三个文件。 使用execfile:
script_1.py
调用script_2.py
。 script_2.py
调用script_3.py
。 我怎样才能获得的文件名和路径script_3.py
,从代码中script_3.py
,而不必传递信息,从参数script_2.py
?
(执行os.getcwd()
将返回原始的脚本文件路径,而不是当前文件。)
p1.py:
execfile("p2.py")
p2.py:
import inspect, os
print inspect.getfile(inspect.currentframe()) # script filename (usually with path)
print os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) # script directory
__file__
正如其他人所说的。 您可能还想使用os.path.realpath来消除符号链接:
import os
os.path.realpath(__file__)
这是一个基于此线程中的答案的实验 - 在Windows上使用Python 2.7.10。
基于堆栈的堆栈是唯一可以提供可靠结果的堆栈。 最后两个语法最短 ,即 -
print os.path.abspath(inspect.stack()[0][1]) # C:testpathlibscript3.py
print os.path.dirname(os.path.abspath(inspect.stack()[0][1])) # C:testpathlib
这里将这些被添加到sys作为函数! 感谢@Usagi和@pablog
基于以下三个文件,并使用python script1.py
从其文件夹中运行script1.py(也尝试使用绝对路径执行execfiles并从单独的文件夹调用)。
C: testpath script1.py:execfile('script2.py execfile('script2.py')
C: testpath script2.py:execfile('lib execfile('lib/script3.py')
C: testpath LIB script3.py:
import sys
import os
import inspect
print "Python " + sys.version
print
print __file__ # script1.py
print sys.argv[0] # script1.py
print inspect.stack()[0][1] # lib/script3.py
print sys.path[0] # C:testpath
print
print os.path.realpath(__file__) # C:testpathscript1.py
print os.path.abspath(__file__) # C:testpathscript1.py
print os.path.basename(__file__) # script1.py
print os.path.basename(os.path.realpath(sys.argv[0])) # script1.py
print
print sys.path[0] # C:testpath
print os.path.abspath(os.path.split(sys.argv[0])[0]) # C:testpath
print os.path.dirname(os.path.abspath(__file__)) # C:testpath
print os.path.dirname(os.path.realpath(sys.argv[0])) # C:testpath
print os.path.dirname(__file__) # (empty string)
print
print inspect.getfile(inspect.currentframe()) # lib/script3.py
print os.path.abspath(inspect.getfile(inspect.currentframe())) # C:testpathlibscript3.py
print os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) # C:testpathlib
print
print os.path.abspath(inspect.stack()[0][1]) # C:testpathlibscript3.py
print os.path.dirname(os.path.abspath(inspect.stack()[0][1])) # C:testpathlib
print
链接地址: http://www.djcxy.com/p/29027.html
上一篇: How do I get the path and name of the file that is currently executing?