2013-12-04 7 views
3

У меня есть скрипт, который запускает несколько модульных тестов, но когда я нажимаю элемент управления c, он просто выходит из конкретного модульного теста, а не всего скрипта. Есть ли способ добиться этого? Это мой код, который фактически выполняет выполнение модульных тестов.После выхода программы с ctrl c

#bitshift right to obtain correct return value, execution of each test. 
    returnValue = os.system(path) >> 8 
    #running total of failures in the program. 
    failures += returnValue 

Вот как я называю эту функцию и выхожу из программы.

failures = execTests(path, testList) 
#exit program with returncode as number of failures 
sys.exit(failures) 

ответ

1

Вы пытались использовать Try/за исключением (очевидно, попробуйте бла-бла-бла, кроме KeyboardInterrupt), а затем либо используют sys.exit (сбои) непосредственно или положить в перерыве пару раз, чтобы выйти из любой петли вы может быть, а затем использоваться sys.exit (сбои). Другой вариант - записать ошибки в текстовый файл, а затем использовать sys.exit() без каких-либо аргументов. Тогда есть классическое исправление запуска из командной строки в качестве администратора. В качестве альтернативы Python может ждать завершения вашего теста; нажатие CTRL + C снова должно закрыть его. Конечно, вы можете пойти на менее элегантный вариант записи вывода в текстовый файл, а затем с помощью os.system («taskkill ...»), чтобы полностью закрыть Python (особенно не рекомендуйте это). Всего несколько мыслей.

2

Фактически эта функция уже присутствует в API. Исходя из Питон стандартной библиотеки, 25.3. unittest — Unit testing framework здесь есть соответствующая выдержка:

-c, --catch

управление - C во время ждет пробного запуска текущего теста до конца, а затем сообщает все результаты до сих пор. A second Управление - C вызывает обычное исключение KeyboardInterrupt.

Для функций, предоставляющих эту функцию, см. Signal Handling.

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