1. ホーム
  2. python

[解決済み] Pythonでinspectを使ってcalleeから呼び出し元の情報を取得する方法とは?

2023-03-14 20:43:55

質問

呼び出し元の情報(どのファイル/どの行)を呼び出し元から取得する必要があります。私は目的のために私がそのためにinpectモジュールを使用することができることを学びましたが、正確にどのようにではありません。

inspectでこれらの情報を得るにはどうすればよいのでしょうか?または、情報を取得するための他の方法はありますか?

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)