Verfolgung von Dateipfad und Zeilennummer

Ich benutze Pythonstrace Modul zum Verfolgen von Code. Wenn ich Code auf diese Weise nachverfolge, kann ich eines der folgenden zwei Ergebnisse erhalten:

Anruf:

tracer = trace.Trace(count=False, trace=True, ignoredirs=[sys.prefix, sys.exec_prefix])
r = tracer.run('run()')
tracer.results().write_results(show_missing=True)

Ergebnis:

<filename>(<line number>): <line of code>

Anruf [Zitat]:

tracer = trace.Trace(count=False, trace=True, ignoredirs=[sys.prefix, sys.exec_prefix], countfuncs=True)
r = tracer.run('run()')
tracer.results().write_results(show_missing=True)

Ergebnis:

filename:<filepath>, modulename:<module name>, funcname: <function name>

Was ich wirklich brauche, ist eine Spur, die mir Folgendes gibt:

<filepath> <line number>

Es scheint, dass ich die obigen Informationen verwenden und sie verschachteln könnte, um das zu erhalten, was ich brauche, aber ein solcher Versuch würde im folgenden Anwendungsfall fehlschlagen:

sys.path enthält VerzeichnisA und VerzeichnisB.Es gibt zwei DateienA/foo.py undB/foo.pyBeideA/foo.py undB/foo.py die Funktion enthaltenbar, definiert in den Zeilen 100 - 120Es gibt einige geringfügige Unterschiede zwischenA/foo.py undB/foo.py

Verwenden Sie in diesem Szenario ein solches Interleaving, um zu identifizieren, welchebar Der Aufruf ist unmöglich (bitte korrigieren Sie mich, wenn ich falsch liege), ohne den Code in jedem Code statisch zu analysierenbar, was für nicht-triviale Funktionen selbst sehr schwierig ist.

Wie kann ich die richtige Trace-Ausgabe erhalten, die ich benötige?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage