Tastendruck erkennen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
DerSuchende
User
Beiträge: 29
Registriert: Montag 21. Februar 2011, 07:37

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?
DerSuchende
User
Beiträge: 29
Registriert: Montag 21. Februar 2011, 07:37

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?
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
DerSuchende
User
Beiträge: 29
Registriert: Montag 21. Februar 2011, 07:37

@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.
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Wenn Du sudo brauchst, dann hast Du Dein System falsch konfiguriert.
Antworten