il problema qui è che PDB utilizza classe Cmd dove per impostazione predefinita:
use_rawinput = 1
Significa che Cmd utilizzerà il metodo raw_input()
per impostazione predefinita anziché sys.stdout.readline()
per leggere dalla console. Questo perché raw_input()
supporta la cronologia (solo se il modulo readline
è caricato) e altri bit utili. L'unico problema è che raw_input()
non supporta il reindirizzamento, quindi se si dispone di uno script:
#!/usr/bin/python
name=raw_input("Enter your name: ")
ed eseguirlo
> python test.py
Enter your name: Alex
ma, se lo si esegue con reindirizzamento uscita sarà bloccato
> python test.py | tee log
questo è esattamente ciò che il PDB utilizza e perché è bloccato. Come ho detto, sys.stdin.readline()
supporta il reindirizzamento e se si riscrive lo script sopra usando readline()
, dovrebbe funzionare.
Torna il problema originale tutto quello che dovete fare è dire Cmd non utilizzare raw_input()
:
Cmd.use_rawinput = 0
o
pdb = pdb.Pdb()
pdb.use_rawinput=0
pdb.set_trace()
fonte
2014-11-13 01:44:38