2012-12-20 48 views
1

我知道__file__包含代码的文件名,但是有没有办法获得调用该函数的脚本/文件的名称?如何获取调用python函数的脚本名称?

如果我有一个文件名为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文件中打印的名称文件?

+0

你可以解析'sys.argv [0]' – mgilson

回答

4

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

获得致电者的文件名,你需要使用sys._getframe() function获取调用框架,然后你可以从该文件名:

import inspect, sys 

print inspect.getsourcefile(sys, sys._getframe(1)) 
+1

'inspect.getsourcefile(sys._getframe(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) 

所以这应该工作。

0
def printFilename(): 
    import traceback 
    print traceback.extract_stack()[-2][0] 
相关问题