Hiho,
ich bin auf der Suche nach einer Möglichkeit, ein Protokoll meiner Funktionsaufrufe beim Programmablauf zu erstellen.
Wichtig ist die zeitliche Abfolge und die übergebenen Werte.
bei cProfile und trace konnte ich eine passende Funktionalität nicht finden, und bin schon fast so weit, in jede Funktion als erste Zeile ein print mit Funktionsnamen und den übergebenen Parameterwerten zu schreiben, was allerdings wohl nicht optimal sein kann.
Kennt jemand eine effizientere Lösung?
Suche Funktion für Funktionsaufrufprotokoll
Mit Decorators ginge das sehr gut, du musst aber explizit angeben bei welchen Funktionen du das haben möchstest. Der Vorteil ist aber, dass du den Body deiner Methode nicht verändern musst, sondern nur die Signatur.
Update
Hier ist ein guter Artikel über Decorators (englisch)
Update
Und noch ein Artikel, der sich direkt auf deinen Anwendungsfall beziehen sollte.
Update
Hier ist ein guter Artikel über Decorators (englisch)
Update
Und noch ein Artikel, der sich direkt auf deinen Anwendungsfall beziehen sollte.
Zuletzt geändert von syntor am Donnerstag 9. Dezember 2010, 13:41, insgesamt 2-mal geändert.
@syntor: Tracebacks? An die Informationen sollte man mit Hilfe des `inspect`-Moduls kommen:
Die Werte in den beiden Objekten müsste man wahrscheinlich noch ein bisschen aufbereiten. Und natürlich bremst dass das Programm aus. Genau wie das `trace`-Modul, welches auch `sys.settrace()` verwendet.
Code: Alles auswählen
from inspect import getargvalues, getframeinfo
def trace(frame, event, arg):
if event in ['call', 'c_call']:
frame_info = getframeinfo(frame)
arg_values = getargvalues(frame)
print frame_info, arg_values
Ich wusste nur nicht genau, wie man es in Python genau anstellt
http://docs.python.org/library/inspect. ... tframeinfoGet information about a frame or traceback object. A 5-tuple is returned, the last five elements of the frame’s frame record.
Changed in version 2.6: Returns a named tuple Traceback(filename, lineno, function, code_context, index).
Erstmal danke für die guten Antworten.
Ich werd das mal ausprobieren und mich, wenn ich weitere Fragen habe wieder melden.
Die Geschwindigkeitseinbußen sind mir an dieser Stelle egal, da ich das Ablaufprotokoll eh nur zum Debuggen und Dokumentieren nutzen will.
Ich werd das mal ausprobieren und mich, wenn ich weitere Fragen habe wieder melden.
Die Geschwindigkeitseinbußen sind mir an dieser Stelle egal, da ich das Ablaufprotokoll eh nur zum Debuggen und Dokumentieren nutzen will.