83 votes

Comment utiliser inspect pour obtenir les informations sur l'appelant auprès de l'appelé en Python?

Je dois obtenir les informations sur 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 y a-t-il un autre moyen d'obtenir l'information?

 import inspect

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

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

hello()
 

105voto

unutbu Points 222216

La trame de l'appelant est une trame plus haute que la trame actuelle. Vous pouvez utiliser inspect.getouterframes pour obtenir le cadre de l'appelant, ainsi que le nom du fichier et le numéro de ligne.

 import inspect

def hello():
    (frame, filename, line_number,
     function_name, lines, index) = inspect.getouterframes(inspect.currentframe())[1]
    print(frame, filename, line_number, function_name, lines, index)

hello()    
# (<frame object at 0x8ba7254>, '/home/unutbu/pybin/test.py', 10, '<module>', ['hello()\n'], 0)
 

49voto

Dmitry K. Points 130

Je suggérerais d'utiliser inspect.stack place:

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X