Ich möchte den Dateinamen / die Funktion erhalten, die die zu verarbeitende Funktion aufgerufen hat.
Verwenden Sie inspect.
caller_file.py
import callee_file
def main():
callee_file.callee_function()
main()
callee_file.py
import inspect
def callee_function():
# print(inspect.stack())
print(inspect.stack()[1].filename)
print(inspect.stack()[1].function)
Anrufe werden in der Reihenfolge des langsamsten Anrufs in inspect.stack gespeichert. Wenn Sie die 4. Zeile auskommentieren, wird das folgende Array ausgegeben.
[
FrameInfo(frame=<frame at 0x7fa68460f050, file '/path-to-dir/callee_file.py', line 4, code callee_function>, filename='/path-to-dir/callee_file.py', lineno=4, function='callee_function', code_context=[' print(inspect.stack())\n'], index=0),
FrameInfo(frame=<frame at 0x10cc17650, file 'caller_file.py', line 5, code main>, filename='caller_file.py', lineno=5, function='main', code_context=[' callee_file.callee_function()\n'], index=0),
FrameInfo(frame=<frame at 0x10ca61450, file 'caller_file.py', line 8, code <module>>, filename='caller_file.py', lineno=8, function='<module>', code_context=['main()\n'], index=0)
]
Das erste sind die Informationen zu "print (inspect.stack ())" in der 4. Zeile von callee_file.py.
Die zweite ist die Information von callee_file.callee_function ()
in der 5. Zeile von caller_file.py
Das dritte ist die Information von main ()
in der 8. Zeile von caller_file.py.
Da wir die Informationen des vorherigen Funktionsaufrufs benötigen, benötigen wir "inspect.stack () [1]", um die Informationen des zweiten Arrays abzurufen.
Die Eigenschaften von "inspect.stack () [1]" sind wie folgt, aber diesmal wäre es schön, wenn wir den Dateinamen und den Funktionsnamen erhalten könnten.
Verwenden Sie inspect.stack () [1] .filename
und inspect.stack () [1] .function
.
Übrigens können Sie auch die Array-Nummer abrufen, sodass Sie "inspect.stack () [1] [1]" und "inspect.stack () [1] [3]" verwenden können.
https://stackoverflow.com/questions/900392/getting-the-caller-function-name-inside-another-function-in-python
Recommended Posts