le problème est ici qui utilise PDB classe Cmd où par défaut:
use_rawinput = 1
Cela signifie que Cmd utilisera la méthode raw_input()
par défaut au lieu de sys.stdout.readline()
pour lire à partir de la console. Ceci est fait parce que raw_input()
prend en charge l'historique (uniquement si le module readline
est chargé) et d'autres bits utiles. Le seul problème est que raw_input()
ne prend pas en charge la redirection, donc si vous avez un script:
#!/usr/bin/python
name=raw_input("Enter your name: ")
et l'exécuter
> python test.py
Enter your name: Alex
mais, si vous l'exécutez avec la redirection de sortie, il sera bloqué
> python test.py | tee log
C'est exactement ce que PDB utilise et pourquoi il est également bloqué. Comme je l'ai mentionné sys.stdin.readline()
prend en charge la redirection et si vous réécrivez le script ci-dessus en utilisant readline()
cela devrait fonctionner.
Retour à la question d'origine tout ce que vous devez faire est de dire Cmd de ne pas utiliser raw_input()
:
Cmd.use_rawinput = 0
ou
pdb = pdb.Pdb()
pdb.use_rawinput=0
pdb.set_trace()