現在、GObject.MainLoop() を使用して Bluetooth クライアントと通信する必要がある Python スクリプトを作成しようとしています。残りのコードをブロックしないように、ループを新しいスレッドに入れました。
Control + C でプログラムを終了しようとするまで、すべて正常に動作します。このコマンドを実行すると、2 番目の try and catch ブロック ("Host:...") が実行されないようです。
スクリプト例:
import time
import threading
from dbus.mainloop.glib import DBusGMainLoop
try:
from gi.repository import GObject
except ImportError:
import gobject as GObject
DBusGMainLoop(set_as_default=True)
def myThread(a):
try:
GObject.threads_init()
mainloop = GObject.MainLoop()
mainloop.run()
except KeyboardInterrupt:
mainloop.quit()
print("Thread: KeyboardInterrupt")
return
try:
myT = threading.Thread(target=myThread, args=(1,))
myT.start()
while 1:
print("Host: Print every 1 sec")
time.sleep(1)
except KeyboardInterrupt:
print("Host: KeyboardInterrupt")
スクリプトの出力:
Host: Print every 1 sec
Host: Print every 1 sec
^CHost: Print every 1 sec
Thread: KeyboardInterrupt
/usr/lib/python2.7/dist-packages/gi/types.py:113: Warning: Source ID 1 was not found when attempting to remove it
return info.invoke(*args, **kwargs)
Host: Print every 1 sec
Host: Print every 1 sec
Host: Print every 1 sec
Host: Print every 1 sec
Process finished with exit code -1
なぜ「print("Host: KeyboardInterrupt")」が実行されないのか疑問に思っています。さらに、記載されている警告を解決する方法がわかりません。
あなたが助けてくれることを願っています!