2017-07-16 4 views
0

Ich arbeite an einem Minispiel, in dem du alle 5 Minuten Material bekommst. Um dies zu überwachen, wollte ich ein einfaches Python-Skript schreiben. Aber jetzt gibt es einen kleinen Roadblok,Python-Hintergrundschleife während der Ausführung anderer Befehle

Wie machen Sie eine Schleife, die alle x Minuten etwas tut, während noch andere Tastatureingaben laufen, ohne dass es die Schleife unterbricht?

+3

Ihren Quellcode bereitstellen (oder zumindest die relevanten Teile) – Fabien

+1

Lesen Sie zuerst diese lernen, wie man um eine Frage vom folgenden Link zu stellen https://stackoverflow.com/help/asking – Kallz

+1

Wir sollen Tutorials hier auf SO nicht anbieten, aber lassen Sie mich die Regeln biegen. Sie müssen wahrscheinlich über das Organisieren Ihres Codes in * threads * lesen. Einer dieser Threads würde alle fünf Minuten aufwachen und etwas unternehmen. Der andere Thread scheint ständig ausgeführt zu werden, um Tastatur- und Mausereignisse zu verarbeiten. –

Antwort

0

Vielleicht ist ein Timer hilfreich für Ihre Aufgabe. Ich empfehle Ihnen, diesen Link zu überprüfen: https://docs.python.org/2.4/lib/timer-objects.html. Während der Timer zählt, können Sie andere Aufgaben ausführen und wenn die Zeit abgelaufen ist, können Sie dem Timer eine Funktion hinzufügen, um etwas zu tun. Timer aus dieser Bibliothek erbt von Threads

+1

Gibt es einen besonderen Grund, dass Sie mit alten Python 2.4-Dokumenten verlinken? Die neueste Version ist [hier] (https://docs.python.org/3/library/threading.html#timer-objects). –

+0

War mein Fehler, ich wusste nicht, dass es für Python 2.x war; Ich werde beim nächsten Mal besonders darauf achten, mit welcher Version ich verlinke. Aber die Idee ist die gleiche, ich glaube, es ist eine gute Lösung für das Problem – JBeloqui

0

Hier ist ein ziemlich einfaches Beispiel für die Verwendung eines threading.Timer. Er zeigt die aktuelle Uhrzeit alle 5 Sekunden an, während er auf Benutzereingaben reagiert.

Dieser Code wird in jedem Terminal ausgeführt, das ANSI/VT100 Terminal Control Escape Sequences unterstützt.

#!/usr/bin/env python3 

''' Scrolling Timer 

    Use a threading Timer loop to display the current time 
    while processing user input 

    See https://stackoverflow.com/q/45130837/4014959 

    Written by PM 2Ring 2017.07.18 
''' 

import readline 
from time import ctime 
from threading import Timer 

# Some ANSI/VT100 Terminal Control Escape Sequences 
CSI = '\x1b[' 
CLEAR = CSI + '2J' 
CLEAR_LINE = CSI + '2K' 
SAVE_CURSOR = CSI + 's' 
UNSAVE_CURSOR = CSI + 'u' 
GOTO_LINE = CSI + '%d;0H' 

def emit(*args): 
    print(*args, sep='', end='', flush=True) 

# Show the current time in the top line using a Timer thread loop 
def show_time(interval): 
    global timer 
    emit(SAVE_CURSOR, GOTO_LINE % 1, CLEAR_LINE, ctime(), UNSAVE_CURSOR) 
    timer = Timer(interval, show_time, (interval,)) 
    timer.start() 

# Set up scrolling, leaving the top line fixed 
emit(CLEAR, CSI + '2;r', GOTO_LINE % 2) 

# Start the timer loop 
show_time(interval=5) 

try: 
    while True: 
     # Get user input and print it in upper case 
     print(input('> ').upper()) 
except KeyboardInterrupt: 
    timer.cancel() 
    # Cancel scrolling 
    emit('\n', SAVE_CURSOR, CSI + '0;0r', UNSAVE_CURSOR) 

Sie benötigen einen KeyboardInterrupt zu senden, das heißt, Hit CtrlC dieses Programm zu stoppen,

Verwandte Themen