如何在python中获取调用函数的脚本的名称?

时间:2012-12-20 22:21:30

标签: python

我知道__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文件的名称吗?

3 个答案:

答案 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]