#python #multithreading #pyqt5 #qthread #keyboardinterrupt
Вопрос:
Я использую графический интерфейс pyqt5 для запуска сценария в QThread. Этот скрипт может перехватывать и обрабатывать KeyboardInterrupt
, и я хочу запустить его, например, при нажатии кнопки.
Можно ли эмулировать/выбросить a KeyboardInterrupt
в поток?
Я ищу что-то вроде этого:
self.cancel_button.pressed.connect(self.throw_keyboard_interrupt) self.thread = QThread() . . . self.thread.start() def throw_keyboard_interrupt(self): self.thread."throw keyboard interrupt into thread"()
Комментарии:
1. Когда вы говорите «запустить сценарий», вы имеете в виду, что ваш поток запускает отдельный процесс? Вы, конечно, можете отправить сигнал SIGINT другому процессу, но сигналы-это процессы, а не потоки. Если вы отправляете себе SIGINT, это влияет на ваш процесс.
2. да, в отдельной теме. Я создаю графический интерфейс для управления сценарием, предназначенным для обработки прерываний клавиатуры, я хочу, чтобы у меня была кнопка «отмена», которая запускает это прерывание клавиатуры
3. Вы прочитали мой вопрос? Потому что ты не ответил на него. Ваш поток запускает другой процесс (
subprocess
например , с помощью) или вы просто запускаете локальную функцию Python?4. извините, это просто поток (Q), а не процесс. но если у вас есть решение, которое работает с процессами, меня это тоже интересует. Я могу перейти к реализации процесса
5. Вы можете использовать
os.kill(pid, signal.SIGINT)
для отправки прерывания с клавиатуры в процесс. И я немного соврал; существует API (pthread_kill) для отправки сигнала потоку, но я никогда не видел, чтобы он был открыт для Python.