呼び出し先から呼び出し元情報(ファイル/行)を取得する必要があります。その目的でinpectモジュールを使用できることを学びましたが、正確には使用できません。
検査でこれらの情報を取得する方法は?または、情報を取得する他の方法はありますか?
import inspect
print __file__
c=inspect.currentframe()
print c.f_lineno
def hello():
print inspect.stack
?? what file called me in what line?
hello()
呼び出し元のフレームは、現在のフレームより1フレーム高いです。 inspect.currentframe().f_back
を使用して、呼び出し元のフレームを見つけることができます。次に、 inspect.getframeinfo を使用して、呼び出し元のファイル名と行番号を取得します。
import inspect
def hello():
previous_frame = inspect.currentframe().f_back
(filename, line_number,
function_name, lines, index) = inspect.getframeinfo(previous_frame)
return (filename, line_number, function_name, lines, index)
print(hello())
# ('/home/unutbu/pybin/test.py', 10, '<module>', ['hello()\n'], 0)
代わりにinspect.stack
を使用することをお勧めします。
import inspect
def hello():
frame,filename,line_number,function_name,lines,index = inspect.stack()[1]
print(frame,filename,line_number,function_name,lines,index)
hello()
単一のパラメーターspos
でスタックフレームをカバーする単純なスタックフレームアドレス指定を使用して、検査用のラッパーを公開しました。
例えば。 pysourceinfo.PySourceInfo.getCallerLinenumber(spos=1)
どこ spos=0
はlib関数、spos=1
は呼び出し元、spos=2
呼び出し元など.