我知道__file__
包含包含代码的文件名,但有没有办法获取调用该函数的脚本/文件的名称?
如果我有一个名为filenametest_b.py
的文件:
def printFilename():
print(__file__)
我导入filenametest_a.py
中的函数:
from filenametest_b import *
printFilename()
我明白了:
C:\Users\a150495>python filenametest_a.py
C:\Users\a150495\filenametest_b.py
我可以在b
文件中执行哪些操作来打印a
文件的名称吗?
答案 0 :(得分:4)
您可以打印sys.argv[0]
以获取脚本文件名。
要获取调用者的文件名,您需要使用sys._getframe()
function来获取调用框架,然后您可以从中检索文件名:
import inspect, sys
print inspect.getsourcefile(sys, sys._getframe(1))
答案 1 :(得分:0)
问得有点太快,我想我刚解决了。
我只是在inspect
模块中查看:
我将其添加到filenametest_b.py
文件中:
def printCaller():
frame,filename,line_number,function_name,lines,index=\
inspect.getouterframes(inspect.currentframe())[1]
print(frame,filename,line_number,function_name,lines,index)
给出了这个:
C:\Users\a150495\filenametest_b.py
(<frame object at 0x000000000231D608>, 'filenametest_a.py', 5, '<module>', ['printCaller()\n'], 0)
所以这应该有用。
答案 2 :(得分:0)
def printFilename():
import traceback
print traceback.extract_stack()[-2][0]