Muszę uzyskać informacje o dzwoniącym (jaki plik / jaka linia) od dzwoniącego. Dowiedziałem się, że mogę użyć do tego modułu inpect, ale nie do końca.
Jak zdobyć te informacje podczas inspekcji? Czy jest inny sposób na uzyskanie informacji?
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]
na[2]
. (inspect.getouterframes
zwraca listę ramek ...). Python jest pięknie zorganizowany.filename, line_number, clsname, lines, index = inspect.getframeinfo(sys._getframe(1))
Sugerowałbym
inspect.stack
zamiast tego użyć :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()
źródło
getouterframes
sugerowane przez @unutbu?getouterframes(currentframe())
istack()
są równoważne pod maską github.com/python/cpython/blob/master/Lib/inspect.py#L1442Opublikowałem opakowanie do inspekcji z prostym adresowaniem stosu ramek pokrywających ramkę stosu jednym parametrem
spos
:Na przykład
pysourceinfo.PySourceInfo.getCallerLinenumber(spos=1)
gdzie
spos=0
jest funkcja-lib,spos=1
jest dzwoniącym,spos=2
dzwoniącym-z-dzwoniącym itp.źródło
Jeśli dzwoniącym jest główny plik, po prostu użyj sys.argv [0]
źródło