Wie zu inspizieren verwendet den Anrufer Informationen von Angerufenen in Python zu erhalten?
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()
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]