Как использовать проверку, чтобы получить информацию о вызывающем абоненте от вызываемого абонента в Python?
Мне нужно получить информацию о вызывающем абоненте (какой файл/какая строка) от вызываемого абонента. Я узнал, что для этого я могу использовать модуль 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)
Ответ 2
Я бы предложил вместо inspect.stack
использовать 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()
Ответ 3
Я опубликовал обертку для проверки с простой адресной таблицей, охватывающей кадр стека одним параметром spos
:
например. pysourceinfo.PySourceInfo.getCallerLinenumber(spos=1)
где spos=0
является lib-функцией, spos=1
является вызывающим, spos=2
вызывающим абонентом и т.д.
Ответ 4
Если вызывающий объект является основным файлом, просто используйте sys.argv [0]