wie zum teufel wartet man auf einen Tastendruck?

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.
jo_hb
User
Beiträge: 72
Registriert: Donnerstag 26. April 2007, 09:21

Montag 25. Juni 2007, 19:10

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

Montag 25. Juni 2007, 19:49

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
:-)
[url]http://halvar.at[/url] | [url=http://halvar.at/elektronik/kleiner_bascom_avr_kurs/]Kleiner Bascom AVR Kurs[/url]
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
jo_hb
User
Beiträge: 72
Registriert: Donnerstag 26. April 2007, 09:21

Montag 25. Juni 2007, 21:25

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

Montag 25. Juni 2007, 22:17

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
:-)
[url]http://halvar.at[/url] | [url=http://halvar.at/elektronik/kleiner_bascom_avr_kurs/]Kleiner Bascom AVR Kurs[/url]
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Montag 25. Juni 2007, 22:25

msvcrt.getch() ist ein Befehl für cmd.com?
BlackJack

Montag 25. Juni 2007, 22:35

Nein, das ist eine Funktion für Python. Sie sollte auf der `stdin`-Datei operieren.
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Montag 25. Juni 2007, 22:45

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.
TUFKAB – the user formerly known as blackbird
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Montag 25. Juni 2007, 23:10

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
:-)
[url]http://halvar.at[/url] | [url=http://halvar.at/elektronik/kleiner_bascom_avr_kurs/]Kleiner Bascom AVR Kurs[/url]
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
Michael Schneider
User
Beiträge: 567
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Bremen
Kontaktdaten:

Dienstag 26. Juni 2007, 07:28

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
Diese Nachricht zersört sich in 5 Sekunden selbst ...
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Dienstag 26. Juni 2007, 07:33

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...
TUFKAB – the user formerly known as blackbird
Benutzeravatar
Michael Schneider
User
Beiträge: 567
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Bremen
Kontaktdaten:

Dienstag 26. Juni 2007, 08:14

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
Diese Nachricht zersört sich in 5 Sekunden selbst ...
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Dienstag 26. Juni 2007, 08:29

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.
TUFKAB – the user formerly known as blackbird
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Dienstag 26. Juni 2007, 08:56

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
:-)
[url]http://halvar.at[/url] | [url=http://halvar.at/elektronik/kleiner_bascom_avr_kurs/]Kleiner Bascom AVR Kurs[/url]
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
Michael Schneider
User
Beiträge: 567
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Bremen
Kontaktdaten:

Mittwoch 27. Juni 2007, 05:55

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
Diese Nachricht zersört sich in 5 Sekunden selbst ...
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Mittwoch 27. Juni 2007, 07:45

Was ist denn mit

Code: Alles auswählen

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