Holen Sie sich den Aufrufer einer Funktion in Python

Was du machen willst

Ich möchte den Dateinamen / die Funktion erhalten, die die zu verarbeitende Funktion aufgerufen hat.

Methode

Verwenden Sie inspect.

Wie macht man

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.

Referenz

https://stackoverflow.com/questions/900392/getting-the-caller-function-name-inside-another-function-in-python

Recommended Posts

Holen Sie sich den Aufrufer einer Funktion in Python
Holen Sie sich die Anzahl der spezifischen Elemente in der Python-Liste
Eine Funktion, die die Verarbeitungszeit einer Methode in Python misst
Erstellen Sie eine Funktion, um den Inhalt der Datenbank in Go abzurufen
Holen Sie sich die Anzahl der Leser von Artikeln über Mendeley in Python
Zeichnen Sie in Python ein Diagramm einer quadratischen Funktion
[Python] Holen Sie sich die Dateien mit Python in den Ordner
Kopieren Sie die Liste in Python
Ausgabe in Form eines Python-Arrays
Lassen Sie uns einen Teil des maschinellen Lernens mit Python berühren
Erstellen Sie eine Funktion in Python
Python VBA, um mit Selenium die gesamte WEB-Seite zu erfassen
Holen Sie sich zu jeder Tageszeit eine Datums- / Uhrzeitinstanz in Python
So ermitteln Sie die Anzahl der Stellen in Python
[Python] Ruft die Liste der im Modul definierten Klassen ab
Ermitteln Sie die Größe (Anzahl der Elemente) von Union Find in Python
Rufen Sie die URL des HTTP-Umleitungsziels in Python ab
Ein Memorandum über die Umsetzung von Empfehlungen in Python
Was bedeutet das letzte () in einer Funktion in Python?
Holen Sie sich den Desktop-Pfad in Python
Holen Sie sich den Skriptpfad in Python
[Python] Machen Sie die Funktion zu einer Lambda-Funktion
Holen Sie sich den Desktop-Pfad in Python
Holen Sie sich den Hostnamen in Python
So erhalten Sie mit Python eine Liste der Dateien im selben Verzeichnis
Versuchen Sie, die Funktionsliste des Python> os-Pakets abzurufen
Finden Sie die scheinbare Breite einer Zeichenfolge in Python heraus
Lassen Sie das Gleichungsdiagramm der linearen Funktion in Python zeichnen
[Hinweis] Import von Dateien in das übergeordnete Verzeichnis in Python
So erhalten Sie den letzten (letzten) Wert in einer Liste in Python
So erhalten Sie eine Liste der integrierten Ausnahmen für Python
Ein Memo, dass ich eine Grundfunktion in Python mit Wiederholung geschrieben habe
Finden Sie die Eigenwerte einer reellen symmetrischen Matrix in Python
Ruft den Index jedes Elements der Verwirrungsmatrix in Python ab
Überprüfen Sie das Verhalten des Zerstörers in Python
Schreiben Sie den Test in die Python-Dokumentzeichenfolge
Nehmen Sie die logische Summe von List in Python (Zip-Funktion)
[Python3] Schreiben Sie das Codeobjekt der Funktion neu
Führen Sie den Python-Interpreter im Skript aus
Das Ergebnis der Installation von Python auf Anaconda
Wie bekomme ich Stacktrace in Python?
[Python] Ruft eine Liste der Instanzvariablen ab
[Python] [Meta] Ist der Python-Typ ein Typ?
Grundlagen zum Ausführen von NoxPlayer in Python
Holen Sie sich ein Zeichen für Conoha mit Python
Auf der Suche nach dem schnellsten FizzBuzz in Python
[Python] Ruft den Zeichencode der Datei ab
Holen Sie sich den Dateinamen des Verzeichnisses (glob)
Die Geschichte der Verarbeitung A von Blackjack (Python)
Ruft die EDINET-Codeliste in Python ab
[Python] Nur eine Liste der Ordner abrufen
Entfernen Sie DICOM-Bilder in Python
So bestimmen Sie die Existenz eines Selenelements in Python
Versuchen Sie, die stochastische Massenfunktion der Binomialverteilung in Python zu transkribieren
So überprüfen Sie die Speichergröße einer Variablen in Python
Lesen Sie die Standardausgabe eines Unterprozesses zeilenweise in Python
So überprüfen Sie die Speichergröße eines Wörterbuchs in Python
[Python] Ruft das Aktualisierungsdatum eines Nachrichtenartikels aus HTML ab
[Python] Ermittelt den Rang der Werte in der Liste in aufsteigender / absteigender Reihenfolge
[Python3] Definition eines Dekorators, der die Ausführungszeit einer Funktion misst
So ermitteln Sie die Scheitelpunktkoordinaten eines Features in ArcPy