J'ai besoin d'obtenir les informations de l'appelant (quel fichier/quelle ligne) de l'appelé. J'ai appris que je peux utiliser le module inpect à cette fin, mais pas exactement comment.
Comment obtenir ces informations avec inspect? Ou existe-t-il un autre moyen d'obtenir les informations?
import inspect
print __file__
c=inspect.currentframe()
print c.f_lineno
def hello():
print inspect.stack
?? what file called me in what line?
hello()
La trame de l'appelant est supérieure d'une trame à la trame actuelle. Vous pouvez utiliser inspect.currentframe().f_back
pour trouver le cadre de l'appelant. Utilisez ensuite inspect.getframeinfo pour obtenir le nom de fichier et le numéro de ligne de l'appelant.
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)
Je suggère d'utiliser inspect.stack
au lieu:
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()
J'ai publié un wrapper pour inspecter avec un adressage stackframe simple couvrant le cadre de la pile par un seul paramètre spos
:
Par exemple. pysourceinfo.PySourceInfo.getCallerLinenumber(spos=1)
où spos=0
est la fonction lib, spos=1
est l'appelant, spos=2
l'appelant-de-l'appelant, etc.