2016-12-24 2 views
0

Ich schreibe einen Python-Editor mit Debugging-Unterstützung. Ich muss interaktiv einen Python-Code aus meiner Anwendung debuggen wie eine IDE, aber ohne viele Optionen.Debug Interaktiv ein Python-Code aus einem anderen Programm

Ich weiß, BDB und pdb, aber ich habe dieses Skript auszuführen, in einer Datei gespeichert und über Befehle wie Schritt zu senden, weiterhin, beenden usw.

ich etwas mit subprocess lib mit pdb bin versucht, aber ich habe kein gutes Ergebnis erzielt.

p = subprocess.Popen(args=[sys.executable, '-m', 'pdb', 'mide.py'], 
       stdin=subprocess.PIPE, 
       stdout=subprocess.PIPE, 
       stderr=subprocess.PIPE, 
       universal_newlines=True) 
p.communicate('s') 
p.communicate('s')# I know why this line doesn't work, it's just a example how i wanted to do it. 

Wie funktioniert das in Python 3.x? Ich brauche nur einen Pfad zu folgen, aber vorzugsweise nur mit Python 3 ohne externe Abhängigkeiten.

P.S. Ich benutze PyQt5.

Antwort

0

Von Subprocess Dokumentation über communicate:

Popen.communicate (Eingang = None)

Interact mit Prozess: Daten zu stdin senden. Lies Daten von stdout und stderr, bis das Dateiende erreicht ist. Warten Sie, bis der Prozess beendet ist. Das optionale Eingabeargument sollte eine Zeichenfolge sein, die an den untergeordneten Prozess gesendet wird, oder Keine, wenn keine Daten an das untergeordnete Element gesendet werden sollen.

Wenn communicate aufgerufen wird, wartet es auf den Prozess zu beenden. Es kann nicht ein zweites Mal aufgerufen werden, da der Prozess bereits beendet wurde.

Sie sollten wahrscheinlich stattdessen direkt von der stdout und stderr lesen. Dies muss in verschiedenen Threads geschehen, oder Sie müssen ab und zu abfragen, ob Daten verfügbar sind. Jeder Befehl kann eine unbekannte Zeit benötigen, um von pdb ausgeführt zu werden, so dass Sie nicht wissen, wann die Ausgabe fertig sein wird. Sie senden den Befehl durch Schreiben in den Prozess stdin.

Sie könnten auch in das pexpect Modul here suchen. Es hat jedoch noch keine gute Windows-Unterstützung.

+0

danke Petersen für die Antwort !! –

Verwandte Themen