Wie zu inspizieren verwendet den Anrufer Informationen von Angerufenen in Python zu erhalten?

StackOverflow https://stackoverflow.com/questions/3711184

  •  02-10-2019
  •  | 
  •  

Frage

Ich brauche die Anrufer Info (welche Datei / welche Linie) von Angerufenen zu bekommen. Ich habe gelernt, dass ich inpect Modul für das für die Zwecke verwenden, aber nicht genau, wie.

, wie diese Informationen erhalten mit inspizieren? Oder gibt es eine andere Möglichkeit, die Informationen zu bekommen?

import inspect

print __file__
c=inspect.currentframe()
print c.f_lineno

def hello():
    print inspect.stack
    ?? what file called me in what line?

hello()
War es hilfreich?

Lösung

Der Rahmen des Anrufers ist ein Rahmen höher als die aktuelle Frame. Sie können mit inspect.currentframe().f_back dem Anrufer Rahmen zu finden. Dann nutzen Sie inspect.getframeinfo den Anrufer Dateinamen und Linie zu bekommen Nummer.

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)

Andere Tipps

Ich würde wieder in Gebrauch inspect.stack vorschlagen statt:

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()

veröffentlichte ich einen Wrapper inspizieren, um mit einfachen Stapelrahmen Adressierung des Stapelrahmens durch einen einzigen Parameter spos abdeckt:

z. pysourceinfo.PySourceInfo.getCallerLinenumber(spos=1)

wo spos=0 ist die lib-Funktion, spos=1 ist der Anrufer, spos=2 der Anrufer-of-the-Anrufer, etc.

Wenn der Anrufer die Hauptdatei ist, einfach sys.argv verwenden [0]

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top