Ich muss die Anruferinformationen (welche Datei / welche Leitung) von Angerufenen erhalten. Ich habe gelernt, dass ich das Inpect-Modul dafür verwenden kann, aber nicht genau wie.
Wie bekomme ich diese Informationen mit inspect? Oder gibt es eine andere Möglichkeit, die Informationen zu erhalten?
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]
in[2]
. (inspect.getouterframes
gibt eine Liste von Frames zurück ...). Python ist wunderschön organisiert.filename, line_number, clsname, lines, index = inspect.getframeinfo(sys._getframe(1))
Ich würde vorschlagen,
inspect.stack
stattdessen zu verwenden :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()
quelle
getouterframes
wie von @unutbu vorgeschlagen zu verwenden?getouterframes(currentframe())
undstack()
unter der Haube github.com/python/cpython/blob/master/Lib/inspect.py#L1442Ich habe einen Wrapper zur Inspektion mit einfacher Stackframe-Adressierung veröffentlicht, der den Stack-Frame mit einem einzigen Parameter abdeckt
spos
:Z.B
pysourceinfo.PySourceInfo.getCallerLinenumber(spos=1)
Wo
spos=0
ist die lib-Funktion,spos=1
ist der Anrufer,spos=2
der Anrufer des Anrufers usw.quelle
Wenn der Aufrufer die Hauptdatei ist, verwenden Sie einfach sys.argv [0]
quelle