Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[Python-de] Warten auf user-input, aber nicht zu lange

244 views
Skip to first unread message

Ulrich Goebel

unread,
Apr 26, 2016, 6:09:46 AM4/26/16
to
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

--
Ulrich Goebel
Paracelsusstr. 120, 53177 Bonn

Christopher Arndt

unread,
Apr 26, 2016, 10:14:20 AM4/26/16
to
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

signature.asc
0 new messages