el problema aquí es que el AP utiliza la clase Cmd, donde por defecto:
use_rawinput = 1
Significa que Cmd utilizará el método raw_input()
de manera predeterminada en lugar de sys.stdout.readline()
para leer desde la consola. Esto se hace porque raw_input()
admite el historial (solo si se carga el módulo readline
) y otros bits útiles. El único problema es que raw_input()
no admite la redirección, por lo que si usted tiene un script:
#!/usr/bin/python
name=raw_input("Enter your name: ")
y ejecutarlo
> python test.py
Enter your name: Alex
pero, si se ejecuta con la redirección de la salida que va pegado
> python test.py | tee log
esto es exactamente lo que utiliza PDB y por qué está atascado también. Como mencioné sys.stdin.readline()
admite la redirección y si reescribe el script anterior usando readline()
debería funcionar.
Volver a la emisión original todo lo que necesita hacer es decirle Cmd a no utilizar raw_input()
:
Cmd.use_rawinput = 0
o
pdb = pdb.Pdb()
pdb.use_rawinput=0
pdb.set_trace()