Seite 1 von 1
ohne Bestätigung direkt auf Tasten reagieren
Verfasst: Samstag 18. Juni 2005, 00:55
von pSy
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
Re: ohne Bestätigung direkt auf Tasten reagieren
Verfasst: Samstag 18. Juni 2005, 08:40
von gerold
pSy hat geschrieben:[...] und jeder Tastendruck erzeugt eine direkte Aktion, ohne das ich 'nen Befehl eintippe und Enter drücken muss.
Hi pSy!
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
mfg
Gerold
Verfasst: Samstag 18. Juni 2005, 09:56
von ProgChild
Du könntest es auch mal mit
curses probieren. Schau die mal das
Tutorial an.
Re: ohne Bestätigung direkt auf Tasten reagieren
Verfasst: Samstag 18. Juni 2005, 20:26
von BlackJack
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.
Das funktioniert nicht, weil die Shell oder das Terminal, oder vielleicht sogar beide, im Regelfall nur ganze Zeilen weitergeben.
Re: ohne Bestätigung direkt auf Tasten reagieren
Verfasst: Samstag 18. Juni 2005, 21:00
von Leonidas
BlackJack hat geschrieben:Das funktioniert nicht, weil die Shell oder das Terminal, oder vielleicht sogar beide, im Regelfall nur ganze Zeilen weitergeben.
Stimmt wohl, deswegen hier ein Beispiel mit curses:
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()
Wahnsinn, curses ist ja ein Schrott, hat mir die Konsole immer und immer wieder zerschossen und statt print muss man addstr nutzen
(wobei letzteres noch zu beheben wäre)
Re: ohne Bestätigung direkt auf Tasten reagieren
Verfasst: Samstag 18. Juni 2005, 21:23
von gerold
BlackJack hat geschrieben: Das funktioniert nicht, weil die Shell oder das Terminal, oder vielleicht sogar beide, im Regelfall nur ganze Zeilen weitergeben.
Hi Blackjack!
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
Verfasst: Dienstag 24. Oktober 2006, 21:58
von abgdf
Hallo,
hab noch das hier gefunden: Kein curses, also wieder print
.
http://aspn.activestate.com/ASPN/Cookbo ... ipe/134892
Viele Grüße