Warten auf user-input, aber nicht zu lange

Hallo,
ich möchte eine Schleife schreiben, die alle 10 Minuten - oder auf Tastendruck - eine Routine aufruft. Das mit den 10 Minuten ist kein Problem: dafür habe ich eine Funktion Pause(Minuten) geschrieben, die im Sekundentakt die Zeit runterzählt und ausgibt:
import os, sys, codecs import time
def Pause(Minuten): print print ("Wir machen %d Minute(n) Pause:" % Minuten) for m in range(Minuten-1, -1, -1): for s in range(59, -1, -1): Rest = str(m) + ':' + str(s) print Rest, '\r', sys.stdout.flush() time.sleep(1)
Dauer = 10
while True: os.system('./Erledigen.py') Pause(Dauer)
Nun möchte ich aber in Ausnahmefällen die Pause durch die Eingabe von ENTER unterbrechen können, damit der nächste Aufruf von Erledigen.py sofort erfolgt. Also etwa so:
def Pause(Minuten): print print ("Wir machen %d Minute(n) Pause:" % Minuten) for m in range(Minuten-1, -1, -1): for s in range(59, -1, -1): Rest = str(m) + ':' + str(s) print 'Weiter mit ENTER', Rest, '\r', sys.stdout.flush() if ENTER_gerdrueckt(): return('ENTER gedrueckt') time.sleep(1)
Wie schreibt man eine solche Funktion ENTER_gedrueckt()?
Mit Dank und Gruß Ulrich

Am 26.04.2016 um 12:09 schrieb Ulrich Goebel:
Wie schreibt man eine solche Funktion ENTER_gedrueckt()?
Dazu musst du die Konsoleneingabe abfragen, ohne zu blocken. Dazu gibt es in Python keine eingebaute Funktion. Normalerweise benutzt man für so etwas ein GUI (Tkinter, PyGTK, PyQt, pygame, etc.) oder Konsolen-Framework (curses), das die plattformabhängigen Methoden dafür kapselt.
Ansonsten und wenn nur POSIX-Systeme unterstützt werden müssen, hilft dir diese Funktion:
https://gist.github.com/SpotlightKid/816e12fc9dd7003f5c6b41ce0a633de2
(Die Zeitsteuerung überlasse ich dir zur Übung ;))
Unter Windows gibt es die Funktionen 'kbhit' und 'getch' im msvcrt-Modul, mit denen man sich eine ähnliche Lösung basteln kann:
https://docs.python.org/3/library/msvcrt.html
Chris
participants (2)
-
Christopher Arndt
-
Ulrich Goebel