Seite 1 von 1

wie zum teufel wartet man auf einen Tastendruck?

Verfasst: Montag 25. Juni 2007, 19:10
von jo_hb
Ohje, meine Fragen werden immer simpler: Also in den docs lese ich das hier:
getch ()
Read a keypress and return the resulting character. Nothing is echoed to the console. This call will block if a keypress is not already available, but will not wait for Enter to be pressed. If the pressed key was a special function key, this will return '\000' or '\xe0'; the next call will return the keycode. The Control-C keypress cannot be read with this function.

ich dachte dass das bedeutet dass getch() wartet (='block'), bis eine Taste gedrückt wird? Also dass das folgende:

Code: Alles auswählen

import msvcrt

ch = msvcrt.getch()
print ch
...eben auf einen Tastendruck wartet? Tut es aber nicht, und ich hab's auch bisher nicht hinbekommen.

Das hier:

Code: Alles auswählen

import msvcrt

ch = ""
while ch != "x":
    ch = msvcrt.getch()
    print ch
da hätte ich gedacht dass es jeden Tastendruck printed, aber stattdessen printed es endlos ein y mit punkten...

Re: wie zum teufel wartet man auf einen Tastendruck?

Verfasst: Montag 25. Juni 2007, 19:49
von gerold
jo_hb hat geschrieben:

Code: Alles auswählen

import msvcrt

ch = ""
while ch != "x":
    ch = msvcrt.getch()
    print ch
da hätte ich gedacht dass es jeden Tastendruck printed, aber stattdessen printed es endlos ein y mit punkten...
Hallo jo_hb!

Das tut es auch. >> nur nicht im IDLE <<
Nimm einfach die Konsole oder eine andere IDE zum Testen.

mfg
Gerold
:-)

Verfasst: Montag 25. Juni 2007, 21:25
von jo_hb
aha, IDLE ist Schuld! Also ich hatte ja schonmal Scite probiert, bin dann aber wieder zu IDLE zurück wegen dem Stack viewer - gibt's den ne andere IDE, die sowas auch hat? Oder vielleicht kann man Scite so konfigurieren dass es den Stackviewer einbindet, bloss wie?

Verfasst: Montag 25. Juni 2007, 22:17
von gerold
jo_hb hat geschrieben:gibt's den ne andere IDE, die sowas auch hat?
Hallo jo_hb!

``msvcrt.getch()`` ist ein spezieller Befehl für die Konsole. Ich glaube nicht, dass du viele IDEs finden wirst, die das abfangen können. Solche Programme testet man dann eben nur über die Konsole.

Was den Rest betrifft, bin ich eingeschworener WingIDE-Fan. Diese IDE hat auch einen "Callstack"-Viewer mit an Bord.

mfg
Gerold
:-)

Verfasst: Montag 25. Juni 2007, 22:25
von veers
msvcrt.getch() ist ein Befehl für cmd.com?

Verfasst: Montag 25. Juni 2007, 22:35
von BlackJack
Nein, das ist eine Funktion für Python. Sie sollte auf der `stdin`-Datei operieren.

Verfasst: Montag 25. Juni 2007, 22:45
von mitsuhiko
BlackJack hat geschrieben:Nein, das ist eine Funktion für Python. Sie sollte auf der `stdin`-Datei operieren.
Aber dieser Befehl läuft nur auf Windows Rechnern und auch nur in der Windows Konsole.

Verfasst: Montag 25. Juni 2007, 23:10
von gerold
blackbird hat geschrieben:läuft nur auf Windows Rechnern und auch nur in der Windows Konsole.
...und greift direkt auf den Konsolen-Buffer zu.

http://docs.python.org/lib/msvcrt-console.html

Und im Idle funktioniert aus diesem Grund auch ``getpass.getpass()`` nicht.

Code: Alles auswählen

>>> import getpass
>>> getpass.getpass()
Warning: Problem with getpass. Passwords may be echoed.
Password: Hallo
'Hallo'
>>>
lg
Gerold
:-)

Verfasst: Dienstag 26. Juni 2007, 07:28
von Michael Schneider
gerold hat geschrieben:Und im Idle funktioniert aus diesem Grund auch ``getpass.getpass()`` nicht.

Code: Alles auswählen

>>> import getpass
>>> getpass.getpass()
Warning: Problem with getpass. Passwords may be echoed.
Password: Hallo
'Hallo'
>>>
lol
Geniales Feature, wenn man dazu tendiert, seine Passwörter zu vergessen. Einfach von Windoof speichern und dann jedes mal ausgeben lassen. It's not a Bug, ...

Michel

Verfasst: Dienstag 26. Juni 2007, 07:33
von mitsuhiko
Michael Schneider hat geschrieben:Geniales Feature, wenn man dazu tendiert, seine Passwörter zu vergessen. Einfach von Windoof speichern und dann jedes mal ausgeben lassen. It's not a Bug, ...
Du vergisst aber schnell...

Verfasst: Dienstag 26. Juni 2007, 08:14
von Michael Schneider
blackbird hat geschrieben:
Michael Schneider hat geschrieben:Geniales Feature, wenn man dazu tendiert, seine Passwörter zu vergessen. Einfach von Windoof speichern und dann jedes mal ausgeben lassen. It's not a Bug, ...
Du vergisst aber schnell...
Kannst Du das bitte etwas ausführlicher formulieren? Ich wollte diese bekannte Redensart nur andeuten und damit den Bogen zum Beginn meines Postings schlagen - ...it's a feature. :-)

Grüße,
Michael

Verfasst: Dienstag 26. Juni 2007, 08:29
von mitsuhiko
Michael Schneider hat geschrieben:Kannst Du das bitte etwas ausführlicher formulieren? Ich wollte diese bekannte Redensart nur andeuten und damit den Bogen zum Beginn meines Postings schlagen - ...it's a feature. :-)
Zwischen Zeichen eingeben und anzeigen vergehen keine zwei Millisekunden. Das wollte ich damit sagen.

Verfasst: Dienstag 26. Juni 2007, 08:56
von gerold
Michael Schneider hat geschrieben:Geniales Feature, wenn man dazu tendiert, seine Passwörter zu vergessen.
Hallo Michel!

Ich möchte das hiermit aufklären: Mit ``getpass.getpass()`` kann man den Benutzer zur Eingabe eines Passworts veranlassen. Wird das Programm in der Konsole ausgeführt, dann wird das Passwort, das der Benutzer eingibt, nicht auf dem Bildschirm angezeigt.

mfg
Gerold
:-)

Verfasst: Mittwoch 27. Juni 2007, 05:55
von Michael Schneider
Hallo,

vielen dank, aber ich habe das schon verstanden und ich hoffe, die anderen auch.

Ich bin nur etwas abgeschwiffen und habe für die Ironie, dass genau das, was geheim bleiben sollte, angezeigt wird (auch wenn in diesem Spezialfall nur im IDLE), laut über eine übertragene, praktische Anwendung nachgedacht. Mir ist auch bewusst, dass der Windows-Eingabedialog, bei dem man sein Login und Kennwort speichern kann (man kann da sein Kennwort einmal eingeben und vergisst es dann schonmal, wenn man es nicht regelmäßig braucht), NICHT im IDLE ausgeführt wird. Es ging mir um den Effekt und nicht darum, es speziell mit dieser Funktion umzusetzen!

Tut mir leid, wenn diese komisch gemeinte Anmerkung falsch rüberkam.

Grüße,
Michael

Verfasst: Mittwoch 27. Juni 2007, 07:45
von mkesper
Was ist denn mit

Code: Alles auswählen

wait = raw_input("Taste drücken")
Das sollte zumindest plattformübergreifend gehen.

Verfasst: Mittwoch 27. Juni 2007, 07:56
von gerold
mkallas hat geschrieben:

Code: Alles auswählen

wait = raw_input("Taste drücken")
Hallo mkallas!

Das reagiert nur auf ENTER und nicht auf jeden Tastendruck.

mfg
Gerold
:-)

PS: mkallas, dein großer Banner im Fuß braucht immer ziemlich lange, bis er geladen ist. Außerdem stört er irgendwie. Wäre super, wenn du dich auf den kleinen Banner beschränken könntest. Das ist keine Aufforderung, sondern nur eine Bitte. :-)

Verfasst: Mittwoch 27. Juni 2007, 11:21
von jo_hb
Hallo Gerold,
Hab mir jetzt mal WingIDE installiert, aber wie es aussieht kann das mit msvcrt.getch() auch nicht umgehen, oder doch?
('oder doch?', weil da immerhin steht "Debug I/O (stdin, stdout, stderr) appears below.", und ich nicht sicher bin ob das getch() nicht mit stdin zu tun hat??)

Oder ist es ansonsten vielleicht möglich aus WingIDE direkt eine Konsole zu starten, in der das programm dann läuft?

EDIT: OK die letzte Frage hat sich erledigt: 'execute current file'... :)

Gruss,
Jo

Verfasst: Mittwoch 27. Juni 2007, 11:54
von mkesper
gerold hat geschrieben:
mkallas hat geschrieben:

Code: Alles auswählen

wait = raw_input("Taste drücken")
Hallo mkallas!

Das reagiert nur auf ENTER und nicht auf jeden Tastendruck.
Stimmt, ich habe die Fragestellung nicht genau genug gelesen...