Hallo...
ich würde gern eine direkte Reaktion auf einen Tastendruck reagieren. Soll heißen, ich habe das Script (unter Linux in der Konsole) in einem "Inputmodus" und jeder Tastendruck erzeugt eine direkte Aktion, ohne das ich 'nen Befehl eintippe und Enter drücken muss.
Wie geht das?
Unter Anderem möchte ich auf Tab reagieren, so dass ich eine einfache Form der "Tab-Completion" mit einbauen kann.
Danke
ohne Bestätigung direkt auf Tasten reagieren
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi pSy!pSy hat geschrieben:[...] und jeder Tastendruck erzeugt eine direkte Aktion, ohne das ich 'nen Befehl eintippe und Enter drücken muss.
Wenn du mit einer while-Schleife arbeitest, dann kannst du mit sys.stdin.read(1) jeweils auf das letzte, eingegebene Zeichen reagieren.
Code: Alles auswählen
line = ""
while True:
s = sys.stdin.read(1)
line += s
if s == "\t":
print "Tab"
elif s == "\n":
break
print line
Gerold
Zuletzt geändert von gerold am Samstag 18. Juni 2005, 10:15, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Das funktioniert nicht, weil die Shell oder das Terminal, oder vielleicht sogar beide, im Regelfall nur ganze Zeilen weitergeben.gerold hat geschrieben:Wenn du mit einer while-Schleife arbeitest, dann kannst du mit sys.stdin.read(1) jeweils auf das letzte, eingegebene Zeichen reagieren.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Stimmt wohl, deswegen hier ein Beispiel mit curses:BlackJack hat geschrieben:Das funktioniert nicht, weil die Shell oder das Terminal, oder vielleicht sogar beide, im Regelfall nur ganze Zeilen weitergeben.
Code: Alles auswählen
#!/usr/bin/env python
# -*- encoding: latin-1 -*-
import curses
screen = curses.initscr()
curses.noecho()
curses.cbreak()
screen.addstr("Drücke einmal die zu untersuchende Sondertaste und dann <q>")
while True:
c = screen.getch()
value = chr(c)
#print value
screen.addstr("\n" + "Taste: %s" % value)
if value == 'q':
break
curses.nocbreak()
curses.endwin()
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi Blackjack!BlackJack hat geschrieben: Das funktioniert nicht, weil die Shell oder das Terminal, oder vielleicht sogar beide, im Regelfall nur ganze Zeilen weitergeben.
Da hast du wohl recht
Nächstes mal teste ich, bevor ich etwas schreibe.
Leonidas hat ja schon das Beispiel mit curses gezeigt. Deshalb hier noch ein Hinweis auf cmd und readline. Laut Doku soll so etwas damit funktionieren. Leider habe ich keine Beispiele gefunden.
http://www.python.org/doc/current/lib/module-cmd.html
http://www.python.org/doc/current/lib/m ... dline.html
http://www.python.org/doc/current/lib/m ... leter.html
Readline gibt es auch für Windows. IPython verwendet das für die Kommandovervollständigung.
http://ipython.scipy.org/doc/manual/nod ... er-Windows
http://sourceforge.net/projects/uncpythontools
lg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Hallo,
hab noch das hier gefunden: Kein curses, also wieder print .
http://aspn.activestate.com/ASPN/Cookbo ... ipe/134892
Viele Grüße
hab noch das hier gefunden: Kein curses, also wieder print .
http://aspn.activestate.com/ASPN/Cookbo ... ipe/134892
Viele Grüße