Бесконечный цикл и пользовательский ввод в качестве завершения - PullRequest
3 голосов
/ 11 августа 2010

У меня есть свой код, и он уходит в бесконечность.Что я хочу, так это то, что если в окне команд unix, если пользователь вводит Ctrl C, я хочу, чтобы программа завершила текущий цикл, а затем вышла из цикла.Итак, я хочу, чтобы он сломался, но я хочу, чтобы он закончил текущий цикл.Использование Ctrl C нормально?Стоит ли искать другой вход?

1 Ответ

3 голосов
/ 11 августа 2010

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

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

Редактировать : Исходя из вашего комментария ниже, типичное использование класса 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
...