Проблема здесь в том, что PDB использует класс Cmd, где по умолчанию:
use_rawinput = 1
Это означает, что Cmd будет использовать метод raw_input()
по умолчанию вместо sys.stdout.readline()
для чтения из консоли. Это сделано потому, что raw_input()
поддерживает историю (только если загружен модуль readline
) и другие полезные биты. Единственная проблема в том, что raw_input()
не поддерживает перенаправление, поэтому, если у вас есть скрипт:
#!/usr/bin/python
name=raw_input("Enter your name: ")
и запустите
> python test.py
Enter your name: Alex
но, если вы запустите его с перенаправлением вывода, он застрянет
> python test.py | tee log
это именно то, что использует PDB, и почему он тоже застрял. Как я уже говорил, sys.stdin.readline()
поддерживает перенаправление, и если вы переписываете скрипт выше, используя readline()
, он должен работать.
Возвращаясь к исходной проблеме, все, что вам нужно сделать, это указать Cmd не использовать raw_input()
:
Cmd.use_rawinput = 0
или
pdb = pdb.Pdb()
pdb.use_rawinput=0
pdb.set_trace()