Script Python pour faire quelque chose à la même heure chaque jour [dupliquer]
cette question a déjà une réponse ici:
j'ai un script python qui fonctionne depuis longtemps que je veux faire quelque chose à 01h00 tous les matins.
j'ai regardé le sched et à l'objet Timer mais je ne vois pas comment les utiliser pour réaliser ceci.
4 réponses
vous pouvez faire ça comme ça:
from datetime import datetime
from threading import Timer
x=datetime.today()
y=x.replace(day=x.day+1, hour=1, minute=0, second=0, microsecond=0)
delta_t=y-x
secs=delta_t.seconds+1
def hello_world():
print "hello world"
#...
t = Timer(secs, hello_world)
t.start()
ceci exécutera une fonction (par ex. hello_world) le lendemain à 1a.M.
j'ai passé pas mal de temps à chercher aussi à lancer un programme Python simple à 01:00. Pour une raison quelconque, Je ne pouvais pas obtenir cron pour le lancer et APScheduler semblait plutôt complexe pour quelque chose qui devrait être simple. Annexe ( ) https://pypi.python.org/pypi/schedule ) semblait à peu près juste.
vous devrez installer leur bibliothèque Python:
pip install schedule
modifié à partir de leur échantillon programme:
import schedule
import time
def job(t):
print "I'm working...", t
return
schedule.every().day.at("01:00").do(job,'It is 01:00')
while True:
schedule.run_pending()
time.sleep(60) # wait one minute
vous aurez besoin de mettre votre propre fonction à la place de l'emploi et l'exécuter avec nohup, par exemple:
nohup python2.7 MyScheduledProgram.py &
n'oubliez pas de le redémarrer si vous redémarrez.
APScheduler pourrait être ce que vous recherchez.
from datetime import date
from apscheduler.scheduler import Scheduler
# Start the scheduler
sched = Scheduler()
sched.start()
# Define the function that is to be executed
def my_job(text):
print text
# The job will be executed on November 6th, 2009
exec_date = date(2009, 11, 6)
# Store the job in a variable in case we want to cancel it
job = sched.add_date_job(my_job, exec_date, ['text'])
# The job will be executed on November 6th, 2009 at 16:30:05
job = sched.add_date_job(my_job, datetime(2009, 11, 6, 16, 30, 5), ['text'])
https://apscheduler.readthedocs.io/en/latest /
vous pouvez simplement obtenir de programmer une autre course en construisant cela dans la fonction que vous programmez.
j'avais besoin de quelque chose de similaire pour une tâche. C'est le code que j'ai écrit: Il calcule le jour suivant et change le temps à tout ce qui est nécessaire et trouve des secondes entre l'heure actuelle et la prochaine heure programmée.
import datetime as dt
def my_job():
print "hello world"
nextDay = dt.datetime.now() + dt.timedelta(days=1)
dateString = nextDay.strftime('%d-%m-%Y') + " 01-00-00"
newDate = nextDay.strptime(dateString,'%d-%m-%Y %H-%M-%S')
delay = (newDate - dt.datetime.now()).total_seconds()
Timer(delay,my_job,()).start()