1

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

4

3 回答 3

4

您可以打印sys.argv[0]以获取脚本文件名。

要获取调用者的文件名,您需要使用该sys._getframe()函数来获取调用帧,然后您可以从中检索文件名:

import inspect, sys

print inspect.getsourcefile(sys, sys._getframe(1))
于 2012-12-20T22:23:18.663 回答
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)

所以这应该有效。

于 2012-12-20T22:25:39.850 回答
0
def printFilename():
    import traceback 
    print traceback.extract_stack()[-2][0] 
于 2012-12-20T22:30:19.957 回答