1
wxPython 응용 프로그램이 있습니다. SIGTERM과 SIGINT에 "닫기"버튼이 클릭 된 것처럼 반응하도록합니다. 그러나 signal.signal(signal.SIGTERM, exit_handler)
을 사용하여 신호를 바인딩하면 이벤트가 메인 애플리케이션에 그래픽으로 전송 된 후에 만 실행됩니다 (버튼을 클릭하거나 메뉴 열기 등). 이벤트를 잡자 마자 바로 이것을 피하고 핸들을 실행할 수 있습니까? 코드wxPython 처리 SIGTERM/SIGINT
요부 :
class MyFrame(wx.Frame):
def __init__(self, parent, title):
# ...
self.Bind(wx.EVT_CLOSE, self.signal_handler)
signal.signal(signal.SIGTERM, self.signal_handler)
signal.signal(signal.SIGINT, self.signal_handler)
# ...
app = wx.App(redirect=False, clearSigInt=False)
frame = MyFrame(None, "Hello World")
app.MainLoop()
이 호출 신호가 어떤 기능을 외부로 이동하고 WX 호출 전에 실행되는 경우에도 발생한다.
왜 이런 식으로 작동하는지 이해하는 데 도움이됩니다. IIRC, 파이썬의 신호는 발생했을 때 잡히지 만 파이썬 코드를 실행할 때만 처리됩니다. 따라서 프로그램이 MainLoop에서 이벤트를 기다리는 동안 이벤트가 발생하면 무언가가 컨트롤을 파이썬 코드로 반환 할 때까지 (예 : 이벤트를 파이썬 코드로 처리기로 전달하는 등) 타이머가 사용되기 전까지 아무 것도 처리되지 않습니다. 위와 같이 컨트롤이 MainLoop을 떠나 파이썬 코드로 주기적으로 들어가 시그널 핸들러를 호출 할 수 있도록하는 한 가지 방법입니다. – RobinDunn
@RobinDunn 정말 내 대답에, 설명 해 줘야 겠어! –