Hallo,
ich möchte gerne eine Eingabe(Tastataur) in der Kommandozeile machen und die nach einer vorgebenen Zeitspanne das Programm bzw. die Eingabe beendet.
Zur Zeit bin ich mir nicht sicher, ob ich es mit per Thread oder Timing oder auch ein einfacher spleep Aufruf helfen kann.
Könnt Ihr mir bitte einen Gedankenstoss geben?
Danke:-)
Timer in Kommandozeile
-
- User
- Beiträge: 419
- Registriert: Sonntag 3. September 2006, 15:11
- Wohnort: in den weiten von NRW
- Kontaktdaten:
Hi,
Was genau willst du denn machen? Wenn du das Programm für eine Zeit nur einfrieren willst, kannst du sleep() nehmen. Vlt. ginge das auch mit ner Schleife, wo man die Zeit prüft und dann ggf. abbricht. Mit Threads wirds schwieriger, gige aber wohl. Kommt ganz auf das Ziel an.
Etwas Code schadet nie.
Gruß, jj
Was genau willst du denn machen? Wenn du das Programm für eine Zeit nur einfrieren willst, kannst du sleep() nehmen. Vlt. ginge das auch mit ner Schleife, wo man die Zeit prüft und dann ggf. abbricht. Mit Threads wirds schwieriger, gige aber wohl. Kommt ganz auf das Ziel an.
Etwas Code schadet nie.
Gruß, jj
- veers
- User
- Beiträge: 1219
- Registriert: Mittwoch 28. Februar 2007, 20:01
- Wohnort: Zürich (CH)
- Kontaktdaten:
Ich hab solche Sachen meistens per signal/alarm() gelöst.
Wird aber vermutlich unter Windows nicht gehen und ist auch eher der C Weg.
hoffentlich wird jemand noch etwas Pythonischeres posten [/code]
Code: Alles auswählen
import signal
def alarm(sig, frame):
raise Exception("Timeout")
signal.signal(signal.SIGALRM, alarm)
signal.alarm(10)
try:
foo = raw_input("Foo: ")
signal.alarm(0)
catch Exception, e:
print "Timeout"
hoffentlich wird jemand noch etwas Pythonischeres posten [/code]
schlangenbeschwörer hat geschrieben:Hi,
Was genau willst du denn machen? Wenn du das Programm für eine Zeit nur einfrieren willst, kannst du sleep() nehmen. Vlt. ginge das auch mit ner Schleife, wo man die Zeit prüft und dann ggf. abbricht. Mit Threads wirds schwieriger, gige aber wohl. Kommt ganz auf das Ziel an.
Etwas Code schadet nie.
Gruß, jj
Code: Alles auswählen
def main():
while True:
print thema #Haupthema ausgeben
for i in abc:
sys.stdout.write(i + "\n")
#sys.stdout.write("\n")
sys.stdout.flush()
tastatur = raw_input(">> ")
if tastatur == 'yy':
break
print "Eingabe abgebrochen....."
else:
eingabe.append(tastatur)
eingabe.sort()
- veers
- User
- Beiträge: 1219
- Registriert: Mittwoch 28. Februar 2007, 20:01
- Wohnort: Zürich (CH)
- Kontaktdaten:
Ich habe es nun nochmal anders versucht:
Geht das auch unter Windows?
Code: Alles auswählen
#!/usr/bin/env python
# vim: set fileencoding=utf-8 :
import fcntl, os, sys, time
class Timeout(Exception): pass
def read_timeout(timeout):
t = time.time()
fcntl.fcntl(sys.stdin.fileno(), fcntl.F_SETFL, os.O_NONBLOCK)
buff = ""
while time.time() < t + timeout and not buff.endswith("\n"):
try:
buff += os.read(sys.stdin.fileno(), 1)
except OSError:
pass
time.sleep(0.01)
fcntl.fcntl(sys.stdin.fileno(), fcntl.F_SETFL, os.O_SYNC)
return buff
def main():
password = "swordfish"
print "Sie haben 10 Sekunden Zeit um das Passwort einzugeben, sollten"
print "sie es nicht schaffen wird sich dieses Programm vernichten"
if read_timeout(10).strip() != password:
print "b0000m"
else:
print "Geheim!"
print raw_input("Nichts kaputt? ")
if __name__ == "__main__":
main()
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo veers!veers hat geschrieben:Geht das auch unter Windows?
Nicht wirklich: ``ImportError: No module named fcntl``
mfg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
...ich habe noch etwas rumprobiert und es mit dieser Lösung halbwegs geschafft. Die Ausgabe auf dem Bildschim muss ich noch unterdrücken. Aber es erfülltzumindest seinen Zweck und man kann es weiter ausbauen.gerold hat geschrieben:Hallo veers!veers hat geschrieben:Geht das auch unter Windows?
Nicht wirklich: ``ImportError: No module named fcntl``
mfg
Gerold
Code: Alles auswählen
def times():
time.sleep(4)
os.kill(os.getpid(), signal.SIGKILL)
thread.start_new_thread(times, ())