ohne Bestätigung direkt auf Tasten reagieren

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
pSy
User
Beiträge: 44
Registriert: Montag 4. Oktober 2004, 17:58
Kontaktdaten:

Samstag 18. Juni 2005, 00:55

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
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Samstag 18. Juni 2005, 08:40

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
:-)
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.
ProgChild
User
Beiträge: 210
Registriert: Samstag 9. April 2005, 10:58
Kontaktdaten:

Samstag 18. Juni 2005, 09:56

Du könntest es auch mal mit curses probieren. Schau die mal das Tutorial an.
BlackJack

Samstag 18. Juni 2005, 20:26

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.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Samstag 18. Juni 2005, 21:00

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)
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Samstag 18. Juni 2005, 21:23

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
abgdf

Dienstag 24. Oktober 2006, 21:58

Hallo,

hab noch das hier gefunden: Kein curses, also wieder print :P.

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

Viele Grüße
Antworten