2010-08-10 4 views
3

У меня есть код, и он переходит в бесконечность. Я хочу, чтобы, если в командном окне unix, если пользователь вводит ctrl C, я хочу, чтобы программа завершила текущий цикл, а затем вышла из цикла. Поэтому я хочу, чтобы он сломался, но я хочу, чтобы он завершил текущий цикл. Использует ctrl C ok? Должен ли я смотреть на другой вход?Бесконечная петля и пользовательский ввод как завершение

ответ

3

Чтобы сделать это правильно и точно, как вы хотите, это немного сложно.

В основном вы хотите уловить Ctrl-C, установить флаг и продолжить до начала цикла (или конца), где вы проверяете этот флаг. Это можно сделать с помощью модуля signal. К счастью, кто-то уже это сделал, и вы можете использовать код в примере linked.

Edit: Основываясь на ваш комментарий ниже, типичное использование класса BreakHandler является:

ih = BreakHandler() 
ih.enable() 
for x in big_set: 
    complex_operation_1() 
    complex_operation_2() 
    complex_operation_3() 
    # Check whether there was a break. 
    if ih.trapped: 
     # Stop the loop. 
     break 
ih.disable() 
# Back to usual operation 
+0

для й в big_set: complex_operation_1() complex_operation_2() complex_operation_3() # Проверьте был перерыв. if ih.trapped: # Остановить цикл. перерыв ih.disable() # Вернуться к обычной работе ... так что для этой части единственное, что мне нужно будет сделать, чтобы начать это если ih.trapped: # Остановить цикл. break ih.disable() в конце моего кода тогда? – Yuki

+0

@Yuki: добавление кода в комментарии теряет свое форматирование, которое испортится с кодом Python, но похоже, что вы в основном правы. Вам нужно сделать 'bh = BreakHandler(); bh.enable() 'перед циклом, конечно. –

+0

у меня есть это: (я не знаю, на данный момент, как превратить код здесь в удобном формате) IH = BreakHandler() ih.enable() в то время как (True): * Делайте все, что * если ih.trapped: break ih.disable() – Yuki

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

  • Нет связанных вопросов^_^