retrasar una tarea hasta cierto tiempo

Lo que quiero hacer en un script de python es dormir unos segundos hasta que se scope el tiempo requerido. IE: si la configuración de ejecución es 15:20 y la hora actual es 10:20, ¿cómo puedo calcular cuántos segundos para dormir? No estoy seguro de cómo convertir 15:20 a una hora y fecha actual y luego deducir la hora real para obtener los segundos.

Piensa que también puedes usar el siguiente código:

from datetime import datetime, time from time import sleep def act(x): return x+10 def wait_start(runTime, action): startTime = time(*(map(int, runTime.split(':')))) while startTime > datetime.today().time(): # you can add here any additional variable to break loop if necessary sleep(1)# you can change 1 sec interval to any other return action wait_start('15:20', lambda: act(100)) 

Si resta un objeto datetime de otro, obtiene un objeto timedelta , que tiene una propiedad de segundos, por lo que puede hacer:

 t1 = datetime.datetime.now() # other stuff here t2 = datetime.datetime.now() delta = t2 - t1 if delta.seconds > WAIT: # do stuff else: # sleep for a bit 

Como un aparte, es posible que desee utilizar cron para tareas que se supone que se ejecutan en momentos específicos.

En su lugar, podría usar el paquete de pause [ https://pypi.python.org/pypi/pause/0.1.2 ]. Tomando un ejemplo de su documentación –

 import pause, datetime dt = datetime.datetime(2013, 6, 2, 14, 36, 34, 383752) pause.until(dt) 

En lugar de usar la función de suspensión (X), también puede usar un temporizador

Depende de lo que planeas hacer.

Aquí hay una solución que usa el módulo Arrow:

 def wait_until(specified_dt: arrow.Arrow) -> None: """Stay in a loop until the specified date and time.""" # Initially check every 10 seconds. refresh = 10 current_dt = arrow.utcnow() while current_dt < specified_dt: # Check every millisecond if close to the specified time. current_dt = arrow.utcnow() if (specified_dt - current_dt).seconds < 11: refresh = .001 time.sleep(refresh) 

Aquí hay una solución. Esto es independiente de la fecha porque la nueva fecha-hora “end2” tiene la misma fecha que la fecha-hora actual y al mismo tiempo no se cambia el formato de fecha-hora.

 from datetime import datetime #this is the way to import a module named datetime... import time #this module is used to sleep import pause a = (datetime.now()) #a = '2017-07-27 00:10:00.107000' #for example print 'the time is' print a end2 = a.replace(hour = 15, minute = 20, second = 00) delta = end2 - a print delta # prints: 5:00:00 print delta.total_seconds() # prints: 114605.0 pause.seconds(delta.total_seconds())