python loops

Python loop de fondo mientras ejecuta otros comandos



loops (2)

Estoy trabajando en un minijuego de irl donde obtienes materiales cada 5 minutos. Para monitorear esto, quería escribir un simple script de Python. Pero ahora hay un pequeño obstáculo,

¿Cómo se hace un bucle que hace algo cada x minutos, mientras sigue ejecutando otras entradas de teclado sin interrumpir el bucle?


Aquí hay un ejemplo bastante simple de usar un threading.Timer . threading.Timer . Muestra la hora actual cada 5 segundos mientras responde a la entrada del usuario.

Este código se ejecutará en cualquier terminal que admita secuencias de escape de control de terminal ANSI / VT100.

#!/usr/bin/env python3 '''''' Scrolling Timer Use a threading Timer loop to display the current time while processing user input See https://.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)

Debe enviar un KeyboardInterrupt , es decir, presione Ctrl C para detener este programa,


Tal vez un temporizador sea útil para su tarea. Le recomiendo que consulte este enlace: https://docs.python.org/2.4/lib/timer-objects.html . Mientras el temporizador cuenta, puede realizar otras tareas y cuando se acabe el tiempo, puede adjuntar una función al temporizador para hacer algo. Los temporizadores de esta biblioteca heredan de subprocesos