[Python-de] 2004q3/005539.html

Hartmut Fröls froels at panno.com
Mit Aug 18 13:12:48 CEST 2004


Hallo Gerhard,

wenn ich das ausprobiere gibt es die selbe Fehlermeldung:

"stty: standard input: Invalid argument"

stdin wird nicht mehr als tty erkannt, obwohl er weiterhin Daten von der 
Tastatur
annimmt. Deshalb ja die Abfrage "   if os.isatty(fd):" am Anfang der 
Eingaberoutine,
da ansonsten die termios-Funktionen die obige Fehlermeldung erzeugen.

Das bringt mich zurück zu meinem ersten Hilferuf:
entweder stdin so "zurückmanipulieren", daß er wieder als tty erkannt 
wird und dann
mit der ursprünglichen Methode abzufragen oder
akzeptieren, daß stdin als File behandelt wird und diese Parameter so 
neu setzen,
daß die Tastendrücke nicht mehr in mehreren Blöcken  gelesen  werden müssen.

Gruß

Hartmut
 

Gerhard Quell schrieb:

> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Hallo Hartmut,
>
> ~ wenn stdin geändert wurde, dann muß auch stty geändert worden sein.
> Vergleiche doch einfach einen stty -a von der Kommandozeile mit einen
> os.system("stty -a > /tmp/stty")
> den Du in Dein Programm einbaust. Dann kannst Du schnell die Differenzen
> entdecken.
>
> Gruß Gerhard
> - ---------------
> Hartmut Fröls wrote:
> | Hallo Gerhard,
> |
> | vielen Dank für deine Bemühungen.
> | Anscheinend manipuliert die vorgeschaltete Warenwirtschaft die stdin 
> so,
> | daß ich immer nur max. 3 Byte
> | vom read zurückbekomme, dummerweise ohne erkennbares System in 1-, 2-
> | oder 3-Byte-Paketen.
> | Ich habe lange gesucht aber keine Möglichkeit gefunden, eventuell
> | Eigenschaften der stdin zu ändern
> | (analog der flags bei os.open). Ich habe mir deshalb mit folgenden
> | Zeilen geholfen:
> |
> | ...
> |      ch1 = os.read(fd,2)
> |      ch = ch1
> |      if len(ch1) == 2 or ch1 == "\033":
> |         while 1:
> |            if ch not in key_func + key_curs + key_curs1 and len(ch) 
> < 5:
> |               ch1 = os.read(fd,2)
> |               ch = ch + ch1
> |            else:
> |               break
> |
> | ...
> |
> | Ist vielleicht nicht elegant, funktioniert aber solange keiner ESC
> | drückt, dafür ist noch
> | der "Sicherheits-Abbruch"  len(ch) <= 5.
> | Für elegantere Lösungen direkt an der stdin wäre ich aber immer noch
> | dankbar.
> |
> | Gruß
> |
> | Hartmut
> - --
> - ------------------------------------------------------ skequell ------
> ~ Gerhard Quell                       Software & Knowledge Engineering
> ~ Schützenweg 3      eMail:     gquell at skequell.de  Fon: 0731-26400651
> ~ 89275 Elchingen    web  : http://www.skequell.de  Fax: 0731-26400652
> - --------------- pgp: 473EC53C  -  http://www.keyserver.net/en---------
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.2.2 (GNU/Linux)
> Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
>
> iD8DBQFBIzGXvHbZD0c+xTwRAhcAAKCSWi4uofr2iLpQTrjnFW7qpRAKqQCgp61M
> Ya5mlrzVgko/nFkYDV1SxEU=
> =JTg4
> -----END PGP SIGNATURE-----
>