Starten Sie den Python-Debugger, während Sie gleichzeitig das Modul als Skript ausführen

8

Wenn Sie ein Python-Paket entwickeln, ist es sehr bequem, die Option -m zu verwenden, um Module innerhalb des Pakets als Skripte zum schnellen Testen auszuführen. Zum Beispiel für somepackage mit dem Modul somemodule.py darin, indem

aufgerufen wird %Vor%

aus dem Verzeichnis, in dem sich somepackage befindet, wird somemodule.py ausgeführt, als ob das Submodul __main__ wäre. Die Verwendung dieser Aufrufsyntax ist besonders wichtig, wenn das Paket explizite relative Importe wie beschrieben verwendet. hier .

Ebenso ist es auch praktisch, die Option -m zu verwenden, um ein Skript wie in

zu debuggen %Vor%

Gibt es eine Möglichkeit, beides gleichzeitig zu tun? Das heißt, kann ich ein Modul aufrufen, als wäre es ein Skript und gleichzeitig in den Debugger starten? Ich weiß, dass ich in den Code selbst gehen und import pdb; pdb.set_trace() einfügen kann, wo ich brechen möchte, aber ich versuche das zu vermeiden.

    
Jed 10.08.2013, 21:08
quelle

4 Antworten

7

Nachdem wir einige Zeit damit experimentiert haben, stellt sich heraus, dass dieser Ansatz tatsächlich funktioniert:

%Vor%

Aus irgendeinem Grund ist die Verwendung von pdb.runcall über pdb.run wichtig.

    
Jed 14.08.2013, 20:01
quelle
0

Hier ist eine weitere Option, die auch mit Befehlszeilenargumenten funktioniert.

Es ist im Allgemeinen eine gute Idee, die Logik Ihres Skripts in eine main -Funktion zu packen. Sie können main dann in eine optionale Liste von Argumenten aufnehmen, um sys.argv zu überschreiben. Hier ist ein Beispiel namens argdemo.py :

%Vor%

Dieses Modul kann wie gewohnt ausgeführt werden:

%Vor%

Oder es kann mit pdb ausgeführt werden, indem direkt main() aufgerufen wird:

%Vor%

(Beachten Sie, dass cmd_line_args eine String-Liste sein muss, genau wie argv ).

Als zusätzlichen Bonus können Sie, wenn Ihr Modul über die Funktion main verfügt, auf dieselbe Weise Komponententests schreiben =)

    
wrongu 24.07.2016 18:15
quelle
0

Aufbauend auf @ Jeds Antwort habe ich dieses Modul erstellt:

%Vor%

Platziere das Modul als mpdb.py irgendwo in deinem Python-Pfad (das aktuelle Verzeichnis funktioniert), dann kannst du Folgendes aufrufen:

%Vor%     
Jason R. Coombs 26.01.2018 15:21
quelle
0

Es gibt Bemühungen läuft um das in Python selbst zu lösen. Mit Python 3.7 können Sie Folgendes tun:

%Vor%

Und ich habe einen Backport für ältere Python-Versionen (2.7 +) zur Verfügung gestellt:

%Vor%     
Jason R. Coombs 26.01.2018 16:35
quelle

Tags und Links