ValueError: данные времени "% H:% M" не соответствуют формату "myfile.py" - PullRequest
0 голосов
/ 03 декабря 2018

Рассмотрим этот метод:

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'

Есть идеи?

...