Seite 1 von 1

Tastendruck erkennen

Verfasst: Dienstag 17. August 2021, 03:19
von DerSuchende
Hallo allerseits,

ich habe hier ein kleines Programmbeispiel, um während der Laufzeit auf einen Tastendruck zu reagieren.

Code: Alles auswählen


import sys
import termios
import tty


inkey_buffer = 1


def inkey():
    fd=sys.stdin.fileno()
    remember_attributes=termios.tcgetattr(fd)
    tty.setraw(sys.stdin.fileno())
    character=sys.stdin.read(inkey_buffer)
    termios.tcsetattr(fd,termios.TCSADRAIN, remember_attributes)
    return character

while True:
    key = inkey()
    if key == '*':
        print('ja')
    if key == 'q':
        break

print('bye')

Das läuft unter Python2 ohne zu meckern. Unter Python3 wirft es folgende Fehlermeldung:

Traceback (most recent call last):
File "/home/peter/Downloads/inkeys.py", line 19, in <module>
key = inkey()
File "/home/peter/Downloads/inkeys.py", line 12, in inkey
remember_attributes=termios.tcgetattr(fd)
termios.error: (25, 'Inappropriate ioctl for device')

Erwartet Python3 hier eine andere Syntax oder funktioniert die im Programm angewandte
Vorgehensweise in Python3 gar nicht?

Re: Tastendruck erkennen

Verfasst: Dienstag 17. August 2021, 03:43
von DerSuchende
Nachtrag:

Ich habe inzwischen das Modul "keyboard" entdeckt, das unter Python3 alle meine Wünsche erfüllt.
Aber es wäre trotzdem interessant zu wissen, was Python3 in meinem obigen Beispiel beanstandet.
Anscheinend wird diese Syntax einfach nicht mehr unterstützt?

Re: Tastendruck erkennen

Verfasst: Dienstag 17. August 2021, 07:34
von Sirius3
Das funktioniert genauso mit Python3. Du hast noch etwas anderes anders, außer der Versionsnummer, so dass Du Dein Python3-Skript nicht in einem richtigen Terminal gestartet hast.
Soweit ich weiß, benötigt `keyboard` Root-Rechte, weil das ein globaler Key-Logger ist. Das Paket ist also nichts, was man in normalen Programmen nutzt.

Re: Tastendruck erkennen

Verfasst: Donnerstag 19. August 2021, 04:19
von DerSuchende
@Sirius3:
Stimmt genau, ich habe noch mal in Ruhe die unterschiedlichen von mir bevorzugten Methoden zum Aufrufen ausprobiert. Siehe da, es geht mit Py2 und Py3, nur muss es eben aus dem Terminal heraus geschehen. Da habe ich mich mit meinen ersten Versuchen wohl selbst hereingelegt :-)
Das mit den Root-Rechten für keyboard.py störte mich nicht sehr, da es auf einem Raspberry Pi laufen soll, der für die DigitalPorts ohnehin sudo verlangt.
Aber insgesamt vielen Dank dafür, dass ich jetzt wieder ruhig schlafen kann.

Re: Tastendruck erkennen

Verfasst: Donnerstag 19. August 2021, 06:11
von Sirius3
Wenn Du sudo brauchst, dann hast Du Dein System falsch konfiguriert.