We wcześniejszym >>wpisie<< konsolowy kalendarz nie wykorzystuje bogactwa modułu calendar. Aby uprościć kod można wykorzystać 'gotowca’ czyli klasę TextCalendar z tego modułu. Dzięki temu można zdefiniować funkcję cal2(), którą można zaimportować z modułu cal2, bądź też wywołać z konsoli. Przy wywołaniu z konsoli musimy nadać plikowi prawa do wykonania (chmod +x cal2.py).
Uruchomienie pliku bez podania argumentów tzn. ./cal2.py spowoduje wyświetlenie w konsoli kalendarza dla bieżącego roku i miesiąca. Alternatywnie możemy uruchomić program z 2 argumentami: rok oraz miesiąc. Podanie innej liczby argumentów wywoła wyjątek TypeError.
#!/usr/bin/env python
import calendar
from datetime import datetime
import sys
def cal2(year=datetime.today().year, month=datetime.today().month):
'''
Simple console calendar.
'''
c = calendar
text_calendar = c.TextCalendar(c.firstweekday())
print(text_calendar.formatmonth(year, month))
if __name__ == '__main__':
args = sys.argv[1:]
if len(args) == 0:
cal2()
elif len(args) == 2:
cal2(int(args[0]), int(args[1]))
else:
raise TypeError(
'cal2() takes 2 arguments ({} given)'.format(len(args)))
Zamiast klasy TextCalendar możemy użyć klasy potomnej – LocaleTextCalendar i uzyskać napisy zgodne z lokalnymi ustawieniami językowymi.