2016-12-24 1 views
0

J'écris un éditeur Python avec le support du débogage. Je dois déboguer interactivement un code python de mon application comme un IDE, mais sans beaucoup d'options.Debug Interactivement un code python d'un autre programme

Je sais BdB et pdb, mais je dois exécuter ce script enregistré dans un fichier et d'envoyer des commandes comme pas sur, continuer, quit, etc.

J'essaie quelque chose en utilisant subprocess lib avec pdb mais je n'ai pas réussi un bon résultat.

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. 

Comment faire pour que cela fonctionne dans python 3.x? J'ai juste besoin d'un chemin à suivre, mais de préférence juste avec python 3 sans dépendances externes.

P.S. J'utilise PyQt5.

Répondre

0

De la documentation sur les sous-processus communicate:

Popen.communicate (entrée = None)

Interagir avec le processus: Envoyer des données à stdin. Lire les données de stdout et stderr, jusqu'à ce que la fin du fichier soit atteinte. Attendez que le processus se termine. L'argument d'entrée facultatif doit être une chaîne à envoyer au processus enfant ou None, si aucune donnée ne doit être envoyée à l'enfant.

Ainsi, lorsque communicate est appelé, il attend que le processus se termine. Il ne peut pas être appelé une seconde fois car le processus est déjà terminé.

Vous devriez probablement lire directement à partir des stdout et stderr vous-même. Cela doit être fait dans différents threads, ou vous devez interroger de temps en temps pour voir si les données sont disponibles. Chaque commande peut prendre une heure inconnue pour être exécutée par pdb, donc vous ne savez pas quand la sortie sera prête. Vous envoyez une commande en écrivant au processus stdin. Vous pouvez également regarder dans le module pexpecthere. Cependant, il n'a pas encore un bon support Windows.

+0

merci Petersen pour la réponse !! –