Рассмотрим этот метод:
import croniter
import datetime
import re
import sys
import time
from sys import argv
now=datetime.datetime.now()
def main():
f = sys.stdin
f1 = f.readlines() #f.readlines()
for x in f1:
if not re.match('^[0-9*]', x):
continue
a = re.split(r'\s+', x)
cron = croniter.croniter(' '.join(a[:5]), now)
print("%s %s" % (cron.get_next(datetime.datetime), ' '.join(a[5:])))
if __name__ == "__main__":
main()
Он проверяет файл, указанный в stdin
файле конфигурации crontab, он работает так: python myfile.py < /etc/crontab
или где бы он ни находился.
Он проверяет задачи в crontab и печатает в следующий раз, когда каждая задача будет запущена в системе.
Вывод будет выглядеть примерно так:
2018-12-03 17:17:00 root cd / && run-parts --report /etc/cron.hourly
2018-12-04 06:25:00 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
2018-12-09 06:47:00 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
2019-01-01 06:52:00 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
Теперь контрольная дата равна now
и это указано в скрипте, мне нужно указать эту дату на cli, она должна работать следующим образом: python myfile.py 11:12 < /path/to/crontab
Я попытался изменить now
на это:
now=time.strptime("%H:%M", argv[0]);
Но меня это бросает:
Traceback (most recent call last):
File "cron.py", line 9, in <module>
now=time.strptime("%H:%M", argv[0]); #datetime.datetime.now()
File "/usr/lib/python3.6/_strptime.py", line 559, in _strptime_time
tt = _strptime(data_string, format)[0]
File "/usr/lib/python3.6/_strptime.py", line 362, in _strptime
(data_string, format))
ValueError: time data '%H:%M' does not match format 'cron.py'
Есть идеи?