2013-02-19 2 views
2

Я отлаживаю свои скрипты Python с помощью ipdb. Как-то у меня возникла проблема: после ввода команды, например, n, s, c, b и т. Д. Я должен нажать Ctrl + D два раза, чтобы ipdb обработал команду и продолжил.ipdb требует Ctrl + D для обработки команды

Любая идея, что вызывает это, и как я могу отключить его?

+0

@EricLeschinski Да, я вижу это. Хотя я думаю, что это не решает мою проблему, не так ли? – RevMoon

ответ

2

Этот эффект не изолирован, чтобы IPDB:

Технически Ctrl-D, прекращает передачу, а только повышает EOF, если это приводит к в пустой буфер ввода. Это происходит только тогда, когда вы нажимаете Ctrl-D перед вводом любых символов .

ли этот эксперимент:

1. At the linux terminal type cat 
2. press enter once. 
3. enter letters: foo 
4. press <Ctrl-D> once, you don't get back to the terminal. 
5. press <Ctrl-D> again, you are brought back to the terminal. 

Так выглядит следующим образом:

[email protected] ~ $ cat 
[email protected] ~ $ 

Foo печатаются дважды, потому что первый раз, когда вы прижали его продувает ввод. Второй раз он интерпретируется как конец программы.

Как остановить это поведение:

Не поддавайтесь подключен к TTY, когда вы нажимаете Ctrl-D. Это означает, что вы не используете обычный терминал linux. Не уверен, что это возможно.

Как обработать команду в IPDB

Нажатие ввода следует обработать команду, как показано на видео здесь: http://www.gregaker.net/2012/apr/05/debugging-python-with-pdb-or-ipdb/

+0

Спасибо, что вы имеете в виду, я не должен быть подключен к TTY? Я начинаю отладку двумя способами: (1) в консоли я ввожу 'ipdb myscript.py' и (2) добавить' import ipdb; pdb.set_trace() 'в мой скрипт и запустить' python myscript.py' – RevMoon

1

Это вещь: Ctrl+D не убивает программ, он разрезает ждет на полпути через. Когда вы нажимаете Ctrl+D, вы прерываете процесс 'read() вызов, ожидающий ввода.

Ctrl + D

Большинство программ будет прервана, когда они читают 0 байт в качестве входных данных. Если вы введете Ctrl+D, прежде чем вводить что-либо, вы будете отправлять 0 байтов по входному каналу, и, возможно, вызывают остановку программы, которая может показаться, что ничего не остается. Это не принудительно.

Однако, если вы нажмете несколько клавиш, то Ctrl+D, вызов, который вы прервали, вернет этот текст, и основная программа решит подождать еще один раунд.

Именно поэтому, когда вы снова набрали Ctrl+D без ввода какого-либо нового текста, вы получите ожидаемое поведение.

Ваш случай

Это то, что, вероятно, происходит:

  1. Вы набираете какой-то характер, они получают буфер.

  2. Вы Ctrl+D. Текст достигает iPdb, но он не обнаруживает новую строку, и, следовательно, он ждет больше.

  3. Вы снова Ctrl+D. На этот раз 0 байт доходит до iPdb, что предполагает, что ничего больше не происходит и обрабатывает текст с или без символов новой строки.

+0

и как я могу сказать ipdb/console читать после того, как я нажал кнопку ввода? – RevMoon

+0

Это должно быть поведение по умолчанию. Вы в Windows? Есть ли неправильная конфигурация на клавиатуре/терминале? Может быть, вы отправляете неправильный символ при нажатии клавиши ввода? – slezica

+0

Нет, я на Ubuntu 12.04. Я могу себе представить, что существует неправильное поведение из-за использования Ubuntu в качестве виртуальной машины на Mac OS X. – RevMoon

Смежные вопросы