Я отправляю signal.CTRL_BREAK_EVENT
в подпроцесс QApplication, и обработчику подпроцесса удается поймать сигнал (и выполнить некоторую магию перед выходом). Однако, когда сигнал отправляется, он не обрабатывается до тех пор, пока я не взаимодействую с окном QApplication (заставляя его каким-то образом использовать циклы ЦП, LOL), и только тогда он будет обрабатывать сигнал.
E.g.
- Я запускаю QApplication как подпроцесс
- Я отправляю
signal.CTRL_BREAK_EVENT
(с сервера, который запустил подпроцесс). - Ничего не произошло.
- Я нажимаю на любую кнопку в QApplication.
- Он обрабатывает
signal.CTRL_BREAK_EVENT
и завершает работу.
Я бы, конечно, предпочел, чтобы шаг 5 происходил на шаге 3.
Что случилось? Как мне «обновить» QApplication или виртуально нажать кнопку, когда она запускается в подпроцессе? Я подозреваю, что основной цикл событий QApplication каким-то образом находится в режиме ожидания... до тех пор, пока с приложением не взаимодействуют. (?)
server.py
app = None
def start_app():
global app
app = subprocess.Popen("python app.py")
def exit_app():
global app
p = app.poll()
if p==None:
print("Subprocess is alive") # debug
app.send_signal(signal.CTRL_BREAK_EVENT)
app.py
import sys, signal
from runner import mainWindow
from PyQt5.QtWidgets import QApplication
app = None
mw = None
def exit_signal_handler(signal, frame):
global app, mw
print("Terminate signal received")
app.quit()
if __name__ == '__main__':
app = QApplication(sys.argv)
signal.signal(signal.SIGBREAK, exit_signal_handler)
mw = mainWindow.MainWindow() # this is the Qt window starting
mw.actionExit.triggered.connect(app.quit)
sys.exit("Runner exit with code: " + str(app.exec()))
connect()
сигналил.. и где? - person Mohammad Kanan   schedule 08.02.2018connect()
, сигнал перехватываетсяexit_signal_handler(signal, frame)
в app.py по ссылке, которую я предоставил - person niCk cAMel   schedule 08.02.2018server.py
ничего не делает при запуске в моей системе (конечно, отсутствует какой-либо стартовый код), аapp.py
отсутствует модульrunner
. - person Murphy   schedule 09.02.2018