Используйте threading.Timer для запуска функции в отдельном потоке после указанной задержки (максимальная продолжительность, которую вы хотите для вашей программы), и в этой функции используйте thread.interrupt_main
(обратите внимание, что он в модуле thread
, , а не в модуле threading
!), чтобы вызвать исключение KeyboardInterrupt в главном потоке.
Более надежный подход (в случае, если сценарий вклинивается в некоторый непрерываемый код, не являющийся Python, чтобы игнорировать прерывания клавиатуры), состоит в том, чтобы порождать «сторожевой процесс» для принудительного уничтожения ошибочного сценария в случае необходимости ( сделайте это , а также вышеупомянутый подход, и немного позже, чем задержка, которую вы используете выше, чтобы дать сценарию возможность запускать свои деструкторы, функции atexit и т. д., если это вообще возможно).