Я пытаюсь использовать argparse
для разбора аргумента командной строки, как часы и минуты %H:%M
, вот так:
import croniter
import datetime
import re
import sys
import time
import argparse
from sys import argv
now = argparse.ArgumentParser() #datetime.datetime.now()
now.add_argument('date', type=lambda s: datetime.datetime.strptime(s, '%H:%M'))
def main():
f = sys.stdin
f1 = 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()
Я использую этот скрипт вот так python myfile.py 14:45 < /etc/crontab
Он должен проанализировать файл crontab, прочитать его содержимое и распечатать, в какое время будет выполняться каждое задание с учетом аргумента часов и минут.
Все работает, пока я не попытаюсь добавить анализатор аргументов вскрипт.
Как вы можете видеть, предыдущая версия использовала now=datetime.datetime.now()
, и она работала отлично, мне просто нужно изменить это на заданный аргумент в консоли.
Прямо сейчас он выбрасывает меняэто:
Traceback (most recent call last):
File "cron.py", line 24, in <module>
main()
File "cron.py", line 21, in main
print("%s %s" % (cron.get_next(datetime.datetime), ' '.join(a[5:])))
File "/home/user/.virtualenvs/rest_tails2/lib/python3.6/site-packages/croniter/croniter.py", line 103, in get_next
return self._get_next(ret_type or self._ret_type, is_prev=False)
File "/home/user/.virtualenvs/rest_tails2/lib/python3.6/site-packages/croniter/croniter.py", line 193, in _get_next
nth_weekday_of_month, is_prev)
File "/home/user/.virtualenvs/rest_tails2/lib/python3.6/site-packages/croniter/croniter.py", line 235, in _calc
dst = now = self._timestamp_to_datetime(now + sign * offset)
TypeError: unsupported operand type(s) for +: 'ArgumentParser' and 'int'
Это оскорбительная строка: print("%s %s" % (cron.get_next(datetime.datetime), ' '.join(a[5:])))
Есть идеи по этому поводу?