Was ist das Python äquivalent von "set -x" in der shell?
Bitte vorschlagen Python-Befehl, der äquivalent zu set -x
in shell-Skripten.
Gibt es eine Möglichkeit zum drucken/melden jede source-Datei Zeile ausgeführt, die von Python?
Ich war auf der Suche nach einem "äquivalent
bash -x
".InformationsquelleAutor Maniv G | 2013-04-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die trace Modul:
Der obigen Befehlszeile wird angezeigt, jede Zeile code, die, wie es ausgeführt wird.
InformationsquelleAutor Frédéric Hamidi
um einen vernünftigen Gegenwert von
bash -x
mit dertrace
Modul, man braucht--ignore-dir
zu blockieren, die den Druck von Quellcode-Zeilen, von jedem Modul importiert, z.B.python -m trace --trace --ignore-dir /usr/lib/python2.7 --ignore-dir /usr/lib/pymodules repost.py
Sie mehr--ignore-dir
Richtlinien, die als notwendig für das andere Modul Standorten.dies ist wichtig, wenn Sie versuchen zu suchen, langsames laden von Modulen wie
requests
die Spucke Millionen von Quellcode-Zeilen, für einige Minuten, auf einem langsamen Rechner. die ordnungsgemäße Verwendung der--ignore-dir
schneidet die Zeit auf ein paar Sekunden, und zeigt nur die Zeilen aus deinem eigenen code.vs.
dies nicht wirklich Ihre Frage zu beantworten; Sie fragte nach einem Python-äquivalent
set -x
. ein einfacher Weg, um Ungefähre, mitsys.settrace()
:welche, wenn Sie ausgeführt wird, ergibt sich:
wodurch die Zeile: 'TRACING.pop()' aus der trace-Ausgabe ist Links als übung für den Leser.
Quellen: https://pymotw.com/2/sys/tracing.html und http://www.dalkescientific.com/writings/diary/archive/2005/04/20/tracing_python_code.html
Dieser ist kürzer und behandelt virtualenv ohne die Notwendigkeit der re-Quelle: alias pyx="python -m-trace --ignore-dir \$(python -c" import os, sys; print(os.pathsep.join(sys.Pfad[1:]))') -t"
Es wäre schön, wenn Sie aktualisiert Ihre Antwort auch arbeiten mit Python 3
im Falle von Python-3-Funktionalität ist noch interessant für dich, siehe meine Antwort unten.
InformationsquelleAutor jcomeau_ictx
Ich mochte @jcomeau_ictx ist Antwort sehr viel, aber es hat einen kleinen Fehler, das ist der Grund, warum ich verlängert Sie ein wenig. Das problem ist, dass jcomeau_ictx 's" traceit " - Funktion funktioniert nur korrekt, wenn alle code verfolgt werden, ist innerhalb der Datei, die aufgerufen wird mit
python file.py
(nennen wir es mal die host-Datei). Wenn Sie rufen alle importierten Funktionen, die Sie bekommen eine Menge von Zeilennummern ohne code. Der Grund dafür ist, dassline = linecache.getline(sys.argv[0], lineno)
immer versucht, Holen Sie sich die code-Zeile aus der host Datei (sys.argv[0]
). Dies kann leicht korrigiert werden, da der name der Datei, die enthält tatsächlich die gezeichnete Linie des Codes finden Sie inframe.f_code.co_filename
. Diese können jetzt produzieren eine Menge output, weshalb man wohl wünschen würde, um ein bisschen mehr Kontrolle.Gibt es auch ein anderes bit, um zu bemerken. Nach der
sys.settrace()
Dokumentation:In anderen Worten, der code verfolgt werden, werden innerhalb einer Funktion.
Zu halten, alles ordentlich, habe ich beschlossen, alles in einer eigenen Datei namens
setx.py
. Der code sollte eigentlich selbsterklärend. Es ist, jedoch, ein Stück code, der erforderlich ist für die Python-3-Kompatibilität, die sich mit der Unterschiede zwischen Python 2 und 3 mit Bezug auf, wie die Module importiert werden. Dies erklärt sich hier. Der code sollte jetzt funktionieren auch beide mit Python 2 und 3.Ich dann testen Sie die Funktionalität mit diesem code:
Dateien
file1.py
undfile2.py
wie folgt Aussehen:und
Die Ausgabe sieht dann wie folgt aus:
InformationsquelleAutor Thomas Kühn