2012-12-20 82 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] 
相關問題