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.

44
demandé sur Anderson Green 2013-02-26 15:32:20

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.

38
répondu sissi_luaty 2013-02-26 13:54:01

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.

86
répondu user2099484 2015-05-22 09:31:07

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.

13
répondu Paul Collingwood 2017-06-22 17:31:17

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()
6
répondu Ankit 2015-10-21 15:04:29