ich versuche gerade, einen Logger für Bluetooth-Ereignisse zu schreiben. Das klappt gut, ich gebe die Ereignisse per print() auf der Konsole aus. Jetzt möchte ich den Logger per Tastendruck beenden. Das funktioniert auch, wenn ich mit keyboard.is_pressed() nach den Tastaturereignissen frage.
Jetzt läuft der Logger aber auf einem Raspi, auf dem ich per ssh eingeloggt bin. Da gibt es keine Tastaturereignisse, daher möchte ich von stdin lesen. Das mache ich mit getch.getch(). Da das aber blockierend ist, und damit kein Bluetooth-Loggen funktioniert, habe ich das getch.getch() in eine Funktion ausgelagert, die per _thread.start_new_thread() gestartet wird und parallel zum Loggen läuft.
Da ergibt sich das Problem, dass print() nur kurz etwas auf der Konsole ausgibt und dann nichts mehr dort ankommt. Leite ich die Ausgaben des Skriptes dagegen in Datei um, kommt in dieser Datei alles an.
Abbrechen per Tastendruck funktioniert damit.
Das hat aber nichts mit Bluetooth zu tun, ich kann das auch ohne Bluetooth nachstellen, mit einer einfachen Hauptschleife. Der entsprechende Code dazu sieht so aus:
Code: Alles auswählen
#!/usr/bin/python3
import getch
import _thread
run_keyboard_test = True
def keywatcher(threadname,second_arg):
char=getch.getch()
print("Key pressed")
global run_keyboard_test
run_keyboard_test = False
#Start keyboard watcher
_thread.start_new_thread( keywatcher, ("Keywatcher",2) )
while run_keyboard_test == True:
print("no key pressed")
Beste Grüße!