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.getouterframesdevuelve una lista de fotogramas ...). Python está muy bien organizado.filename, line_number, clsname, lines, index = inspect.getframeinfo(sys._getframe(1))Sugeriría usar
inspect.stacken 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
getouterframescomo 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=0está la función lib,spos=1es el llamador,spos=2el llamador del llamador, etc.fuente
Si la persona que llama es el archivo principal, simplemente use sys.argv [0]
fuente