Schleife bis Tastendruck in Python
Bearbeitet am Donnerstag, 17. März 2011, 17:00 Uhr von pbouda
Für kleine Skripte benutze ich immer öfter Python statt Perl. Nun hatte ich vor kurzem das Problem, in Python eine Schleife laufen zu lassen, bis der Benutzer eine bestimmte Taste drückt. Eine richtig einfache Lösung gibt es dafür erstaunlicherweise nicht, aber letztendlich habe ich folgenden Code zusammengegoogelt und programmiert, der allerdings nur unter Unix (bzw. POSIX-Betriebssytemen; wegen dem verwendeten termios-Modul) funktioniert:
# -*- coding: utf8 -*-
import sys, os
import termios, fcntl
fd = sys.stdin.fileno()
oldterm = termios.tcgetattr(fd)
newattr = termios.tcgetattr(fd)
newattr[3] = newattr[3] & ~termios.ICANON & ~termios.ECHO
termios.tcsetattr(fd, termios.TCSANOW, newattr)
oldflags = fcntl.fcntl(fd, fcntl.F_GETFL)
fcntl.fcntl(fd, fcntl.F_SETFL, oldflags | os.O_NONBLOCK)
try:
while 1:
# hier steht der Code, der durchgeführt werden soll,
# bis eine Taste gedrückt wurde
print "Ich bin da."
try:
c = sys.stdin.read(1)
if c == 'q':
break
except IOError: pass
finally:
termios.tcsetattr(fd, termios.TCSAFLUSH, oldterm)
fcntl.fcntl(fd, fcntl.F_SETFL, oldflags)
Die Schleife läuft, bis der Benutzer die Taste “q” drückt. Sieht umständlich aus, läuft aber dafür wie geschmiert.


