Если вы просто хотите иметь возможность CTRL C из программы, вы можете перехватить встроенное в Python исключение KeyboardInterrupt
и затем продолжить закрывать ресурс.
try:
while True:
frame, frame_id, time_video = next(self.distributor_frame)
if frame is not None:
self.out.write(frame)
else:
break
except KeyboardInterrupt:
print('Stopped by keyboard interrupt')
self.out.release()
Обычно, если вы просто отправляете SIGINT ( CTRL C ), чтобы остановить скрипт, это вызовет исключение в Python, и это исключение будет вырезанопрограмма.Тем не менее, вы можете перехватить этот сигнал с помощью except KeyboardInterrupt
и просто ничего не делать, то есть pass
или print
с каким-либо сообщением (как я) или с чем угодно.Но поскольку мы поймали исключение и больше не вызываем его, программа не завершает работу с прерыванием, находящимся внутри этого блока.
В качестве альтернативы можно создать подкласс (или создать класс, который включает в себя) VideoWriter
и назначьте ему менеджер контекста --- тогда, даже если вы получите исключение, ресурс будет закрыт. В этом ответе есть хорошее обсуждение того, как создать контекстный менеджер самостоятельно.