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