Мне нужно получить информацию о вызывающем абоненте (какой файл / какая строка) от вызываемого абонента. Я узнал, что могу использовать для этого модуль 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]
на[2]
. (inspect.getouterframes
возвращает список кадров ...). Python прекрасно организован.filename, line_number, clsname, lines, index = inspect.getframeinfo(sys._getframe(1))
Я бы предложил
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()
источник
getouterframes
предложенный @unutbu?getouterframes(currentframe())
иstack()
под капотом эквивалентны github.com/python/cpython/blob/master/Lib/inspect.py#L1442Я опубликовал оболочку для проверки с простой адресацией стекового фрейма, покрывающей фрейм стека одним параметром
spos
:Например
pysourceinfo.PySourceInfo.getCallerLinenumber(spos=1)
где
spos=0
- функция библиотеки,spos=1
- вызывающий абонент,spos=2
вызывающий абонент и т. д.источник
Если вызывающий - главный файл, просто используйте sys.argv [0]
источник