Запускать python скрипт каждые 5 минут на часах - PullRequest
0 голосов
/ 12 февраля 2020

Я занят сценарием python на малиновом пи для датчика дождя. Сценарий должен подсчитать кончики ведра и записать общее количество дождя каждые 5 минут в CSV-файл. Сценарий выполняет запись сейчас каждые 299,9 секунды, но я хочу, чтобы он записывал каждые 5 минут, например: 14:00, 14:05, 14:10 и т. Д.

Есть ли кто-нибудь, кто мог бы помочь меня нет?

Заранее спасибо!

Ответы [ 2 ]

3 голосов
/ 12 февраля 2020

Используйте cronjob, для малины пи go с crontab https://www.raspberrypi.org/documentation/linux/usage/cron.md

0 голосов
/ 12 февраля 2020

Вы найдете множество полезных функций в модуле datetime:

from datetime import datetime, timedelta

# Bootstrap by getting the most recent time that had minutes as a multiple of 5
time_now = datetime.utcnow()  # Or .now() for local time
prev_minute = time_now.minute - (time_now.minute % 5)
time_rounded = time_now.replace(minute=prev_minute, second=0, microsecond=0)

while True:
    # Wait until next 5 minute time
    time_rounded += timedelta(minutes=5)
    time_to_wait = (time_rounded - datetime.utcnow()).total_seconds()
    time.sleep(time_to_wait)

    # Now do whatever you want
    do_my_thing()

Обратите внимание, что когда вызывается do_my_thing(), это будет на самом деле дробно после точного времени в time_to_round, потому что, очевидно, компьютеры не могут работать точно в нулевое время. Это гарантированно не проснется до этого времени, хотя. Если вы хотите сослаться на «текущее время» в do_my_thing(), передайте переменную time_rounded, чтобы получить точные метки времени в файле журнала.

В приведенном выше коде я намеренно пересчитал time_to_wait каждый раз, вместо того, чтобы просто установить его на 5 минут после первого раза. Это связано с тем, что небольшая задержка, о которой я только что упомянул, не приводит к постепенному росту снежного кома после долгого запуска сценария.

...