Necesito obtener la información de la persona que llama (qué archivo / qué línea) del destinatario. Aprendí que puedo usar el módulo inpect para eso, pero no exactamente cómo.
¿Cómo obtener esa información con inspeccionar? ¿O hay alguna otra forma de obtener la información?
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]
a[2]
. (inspect.getouterframes
devuelve una lista de fotogramas ...). Python está muy bien organizado.filename, line_number, clsname, lines, index = inspect.getframeinfo(sys._getframe(1))
Sugeriría usar
inspect.stack
en su lugar: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()
fuente
getouterframes
como lo sugiere @unutbu?getouterframes(currentframe())
ystack()
son equivalentes bajo el capó github.com/python/cpython/blob/master/Lib/inspect.py#L1442Publiqué un contenedor para inspeccionar con direccionamiento de marco de pila simple que cubre el marco de pila con un solo parámetro
spos
:P.ej
pysourceinfo.PySourceInfo.getCallerLinenumber(spos=1)
donde
spos=0
está la función lib,spos=1
es el llamador,spos=2
el llamador del llamador, etc.fuente
Si la persona que llama es el archivo principal, simplemente use sys.argv [0]
fuente