6
votes

Meilleur moyen de traiter avec Python PDB FLAKINES RE / STDOUT?

Si j'ai un programme où stdout est redirigé, mon PDB invite toutes aller à la redirection, car la bibliothèque a été écrite pour écrire sur stdout . .

Oftentimes Ce problème est subtil, ce qui me faisait penser qu'un programme est suspendu lorsqu'il attend vraiment une contribution.

Comment les gens travaillent-ils autour de cela? (Malheureusement, l'utilisation d'autres debuggotes comme WinPDB n'est pas une option).


0 commentaires

3 Réponses :


2
votes

Si vous invoquez PDB dans le code, vous pouvez transmettre votre propre stdout dans le constructeur. sys .__ stdout __ pourrait être un bon choix.

Si vous invoquez PDB à partir de la ligne de commande, vous pouvez copier la fonction Main () de pdb.py dans votre propre sane_pdb.py. Puis changez l'initialisation PDB () à: xxx

alors vous pouvez invoquer sane_pdb.py au lieu de pdb.py.py. Ce n'est pas génial que vous deviez copier 40 lignes dans votre propre fichier pour en changer l'un, mais c'est une option.


0 commentaires

5
votes

Cette réponse est juste pour compléter NED, comme moyen d'envelopper la fonction PDB.PY MAIN () de manière à ne pas nécessiter de copier 40 lignes simplement pour en changer l'un: < PRE> XXX

Je ne sais pas si cela fonctionne réellement pour le problème du questeur, mais cela fait ce que NED décrit ...


0 commentaires

4
votes

Le problème ici est que PDB utilise la classe CMD où par défaut: xxx

Cela signifie que cmd utilisera brut_input () méthode par défaut au lieu de sys.stdout.readline () à lire à partir de la console. Ceci est fait car Raw_Input () prend en charge l'historique (uniquement si LishineLine est chargé) et d'autres bits utiles. Le seul problème est que Raw_Input () ne prend pas la redirection, donc si vous avez un script: xxx

et exécuté < Pré> xxx

mais, si vous l'exécutez avec la redirection de sortie, il restera bloqué xxx

C'est exactement ce que PDB utilise et pourquoi il est coincé aussi. Comme je l'ai mentionné sys.stdin.readline () prend en charge la redirection et si vous réécrivez le script ci-dessus à l'aide de readline () Ça devrait fonctionner.

retour à Le problème d'origine Tout ce que vous avez à faire est de dire à CMD de ne pas utiliser brut_input () : xxx

ou xxx


0 commentaires