2011-09-12 21 views
17

Potrzebuję parsować definicję harmonogramu podobną do crontaba w Pythonie (np. 00 3 * * *) i uzyskać miejsce, w którym powinno to być ostatnie uruchomienie.Parsowanie linii w stylu crontab

Czy istnieje dobra (najlepiej mała) biblioteka, która analizuje te ciągi i tłumaczy je na daty?

+0

possibile duplikat [Przetwarza cron'a w Pythonie] (http://stackoverflow.com/questions/1511854/parse-a-cron-entry-in-python) spójrz na [python-crontab] (http://pypi.python.org/pypi/python-crontab/) –

+1

Prawdopodobnie zadawane wcześniej: http://stackoverflow.com/questions/4190997/is-there-a -python-moduł-by-uzyskać-następny-runtime-from-a-crontab-style-time-definition –

+0

python-crontab było jednym z pierwszych rozwiązań, które badałem, i nie ma funkcjonalności do uzyskania dat. – Krumelur

Odpowiedz

35

Być może pakiet python croniter pasuje do Twoich potrzeb. Przykład

Zastosowanie:

>>> import croniter 
>>> import datetime 
>>> now = datetime.datetime.now() 
>>> cron = croniter.croniter('45 17 */2 * *', now) 
>>> cron.get_next(datetime.datetime) 
datetime.datetime(2011, 9, 14, 17, 45) 
>>> cron.get_next(datetime.datetime) 
datetime.datetime(2011, 9, 16, 17, 45) 
>>> cron.get_next(datetime.datetime) 
datetime.datetime(2011, 9, 18, 17, 45) 
+0

Dokładnie tego potrzebuję i potrzebuję funkcji get_prev, która tam jest. Dzięki! – Krumelur

+0

+1 dla cronitera. Szukałem odpowiednika języka Java w języku Python [Spring CronTrigger] (http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/scheduling/support/CronTrigger.html). Uważam, że API tego drugiego jest trochę bardziej naturalne, chociaż tak naprawdę nie lubię. Wolałbym raczej zamiast tego obiekt bezstanowy i niezmienny, np. 'cronExpr = CronExpression.compile (" 0 0 * * * "); datetime = cronExpr.next (datetime); '. –

1

Być może można użyć tego modułu:

http://code.activestate.com/recipes/577466-cron-like-triggers/

użyłem tego modułu do dokonywania crona przestrzeni użytkownika w Pythonie i działa bardzo dobrze. Ten moduł może obsługiwać linie przypominające crontab.

+0

Dzięki. Nie znalazłem jednak sposobu na wyodrębnienie dokładnej daty z tego kodu. – Krumelur