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 :D

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 :oops: :oops:
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 :P.

http://aspn.activestate.com/ASPN/Cookbo ... ipe/134892

Viele Grüße