Python Timer

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
Rumble
User
Beiträge: 12
Registriert: Sonntag 25. Oktober 2009, 12:07

Schönen Guten Abend!
Mein Problem ist, dass ich eine Idee habe aber nicht weiß wie ich die umsetzen kann. Das ganze sollte in etwa so sein, dass Python quasi fragt ob jemand da ist und der jenige soll einfach enter drücken. Wenn er dies nicht tut, soll eine entsprechende Nachricht erscheinen.

Was ist an dieser Syntax falsch?
(Ich vermute man kann das mit "if" nicht machen, oder?)

Code: Alles auswählen

print ("Hi DU, drück enter!")
a = raw_input("press enter")
import time
if time.sleep(2):
    print ("Du bist zu spät!")
else:
    print ("Gut so...")
Benutzeravatar
SigMA
User
Beiträge: 181
Registriert: Sonntag 4. April 2004, 13:27
Wohnort: Freiburg
Kontaktdaten:

Das was du suchst nennt sich "threads" lass den "timer" in einem eigenen Thread laufen, der deinen Mainloop dann unterbricht.

Im Moment wird dein Programm linear ausgeführt. Erst die erste Zeile, dann die Zweite, bei raw_input wartet er und dann kommt die IF-Abfrage. Mit Threads sorgst du dafür, dass mehrere Sachen nebeneinander ausgeführt werden, sodass das Programm mehrere Sachen Gleichzeitig machen kann. Quasi weibliche Programmierung.

gruß, SigMA
Leichtdio.de - Das Kreativ-Blog
http://www.leichtdio.de
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

SigMA hat geschrieben:Quasi weibliche Programmierung.
:D

@OP: Ganz so einfach ist das Problem nicht zu lösen, du willst ja den Input abbrechen, falls der Benutzer eine zeitlang nichts eingibt, hab ich das richtig verstanden?

Edit:
Wusst ich doch, dass wir die Frage schon mal hatten, keine Garantie, dass das funtioniert:
http://www.python-forum.de/post-143168.html#143168

Edit2:
Wenn ich mir den Code genauer anschaue, bezweifele ich, dass der richtig funktioniert. Auf jeden Fall funktioniert danach im MainThread die raw_input-Funktion nicht mehr.
Außerdem müsste noch die Variable ``Eingabe`` mit einem Lock gesichert werden.
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Arbeitest Du an einer "echten" Konsole (DOS-Eingabeaufforderung oder Terminalemulator unter Linux/Unices) geht das mit einer Kombination aus kbhit() und getch() bzw. getwch():

Code: Alles auswählen

import time
starttime = time.time()
while starttime+10 > time.time():
    time.sleep(.1) # nimm dem busy wait ein wenig business
    if kbhit() and ord(getwch())==10:
        print "gut so..."
        break
else:
    print "zu spät"
kbhit() und getwch() findest Du in [mod]msvcrt[/mod] für Windows oder hier als Posixversion für Linux/Unix, wobei letzteres noch in der Umarbeitung ist.

Edit:
Die Posixvariante von kbhit() unterstützt auch ein timeout Argument (in ms), wodurch die Sache einfacher wird (sich aber auch etwas anders verhält):

Code: Alles auswählen

if kbhit(timeout=10000) and ord(getwch())==10:
    print "gut so"
else:
    print "zu spaet bzw. falsche taste"
Antworten