Ik heb de bellerinfo (welk bestand/welke regel) nodig van callee. Ik heb geleerd dat ik de inpect-module daarvoor voor doeleinden kan gebruiken, maar niet precies hoe.
Hoe krijg ik die informatie met inspecteren? Of is er een andere manier om de informatie te krijgen?
import inspect
print __file__
c=inspect.currentframe()
print c.f_lineno
def hello():
print inspect.stack
?? what file called me in what line?
hello()
Antwoord 1, autoriteit 100%
Het frame van de beller is één frame hoger dan het huidige frame. U kunt inspect.currentframe().f_back
om het frame van de beller te vinden.
Gebruik vervolgens inspect.getframeinfoom de bestandsnaam en het regelnummer van de beller te krijgen .
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)
Antwoord 2, autoriteit 45%
Ik raad aan om in plaats daarvan inspect.stack
te gebruiken:
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()
Antwoord 3, autoriteit 2%
Ik heb een wrapper gepubliceerd voor inspectie met eenvoudige stackframe-adressering die het stackframe bedekt met een enkele parameter spos
:
Bijvoorbeeld pysourceinfo.PySourceInfo.getCallerLinenumber(spos=1)
waar spos=0
de lib-functie is, spos=1
de beller is, spos=2
de beller-van-de -beller, enz.
Antwoord 4
Als de aanroeper het hoofdbestand is, gebruik dan gewoon sys.argv[0]