没有人感兴趣,所以让我尝试.
只是在同一页面上:
import signal
from gi.repository import GObject
GObject.threads_init()
mainloop = GObject.MainLoop()
signal.signal(signal.SIGINT, lambda n, f: mainloop.quit())
mainloop.run()
此代码有效:
import signal
from gi.repository import GObject
signal.signal(signal.SIGINT, lambda n, f: print("kill"))
GObject.threads_init()
mainloop = GObject.MainLoop()
mainloop.run()
我先注册了信号处理程序,然后启动了循环.奇怪的是它没有被调用.但是结果是-符合预期…
附带说明-根据他们的文档,不赞成使用mainloop.那是第一件事.
编辑
这是从MainLoop内部的stdin读取的示例:
import signal
import sys
from gi.repository import GObject, GLib
GObject.threads_init()
def readInput():
print('readInput
')
while True:
input = sys.stdin.readline()
print(input)
if input.strip() == 'exit':
print('closing main loop')
mainloop.quit()
print('terminating thread')
return
if __name__ == '__main__':
signal.signal(signal.SIGINT, signal.SIG_DFL)
mainloop = GObject.MainLoop.new(None, False)
GObject.timeout_add(1000, readInput)
# inputThread = threading.Thread(name='input', target=readInput)
# inputThread.start()
# print('started input')
print('running mainloop
')
try:
mainloop.run()
except KeyboardInterrupt:
mainloop.quit()
添加.new(None,False)可使CTRL-C正常工作.从here开始使用,还有here是另一个关于将脉冲音频控制器与GLib / GObject循环集成的线程.有一些关于将dbus与循环集成的示例,但我不确定您希望采用哪种方式…