python主循环方法mainloop_python gobject.mainloop吞噬信号事件
沒有人感興趣,所以讓我嘗試.
只是在同一頁面上:
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與循環集成的示例,但我不確定您希望采用哪種方式…
總結
以上是生活随笔為你收集整理的python主循环方法mainloop_python gobject.mainloop吞噬信号事件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 股票连续跌停三天要不要卖?
- 下一篇: python打开方式错误_浅谈pytho