Temat: [Skrypt] wyznaczanie dni wolnych (święta stałe/ruchome, soboty itp.)
Cześć!
Nuda, więc machnąłem skrypt (python), nic specjalnego, ale może się komuś przyda.
W skrócie uruchamia komendy uwzględniając dni wolne
- soboty
- niedziele
- święta stałe (np. Trzech Króli)
- święta ruchome (np. Wielkanoc)
Co potrzebne
- python (być może wystarczy python-mini)
- https://pypi.python.org/pypi/holiday/0.0.1
- https://pypi.python.org/pypi/six
- https://pypi.python.org/pypi/nine
Do zainstalowania pakietow holiday, six, nine, można posłużyć się:
pip install holiday
pip install six
pip install nineInfo jak zainstalować pip (http://eko.one.pl/forum/viewtopic.php?id=1165)
Przykładowe użycia:
np. zatrzymanie wifi gdy jest dzień wolny
runIfHoliday.py -i stopWifi.shnp. zatrzymanie wifi gdy jutro jest dzień wolny
runIfHoliday.py -d 1 -i stopWifi.shnp. zatrzymanie wifi gdy jutro jest dzień pracujący
runIfHoliday.py -n -d 1 -i stopWifi.shSkrypt:
#!/usr/bin/python
# -*- coding: utf-8 -*-
from holiday import get_holidays
from datetime import date, timedelta
from subprocess import call
import sys, getopt
import subprocess
def pmsg(msg):
#print msg
subprocess.Popen(['logger', '-s', msg])
def num(s):
try:
return int(s)
except ValueError as err:
pmsg(err)
sys.exit(2)
def start(inputFile,dayshift,negate):
now = date.today() + timedelta(days=dayshift)
currYear = now.year
holidays = get_holidays(year=currYear, place='Poland')
isholiday = now in holidays
weekday = now.weekday()
isSaturday = weekday == 5
isSunday = weekday == 6
isFree = isholiday or isSunday or isSaturday
if isholiday:
hmsg = ", " + holidays[now] + ")"
else:
hmsg = ")"
fhmsg = str(now) + " (" + now.strftime("%A") + hmsg
run = isFree
if negate:
run = not(isFree)
if run:
pmsg(fhmsg + " run: " + inputFile)
call(inputFile)
else:
pmsg(fhmsg)
def main(argv):
inputFile = ''
valid = False
negate = False
dayshift = 0
pmsg(str(sys.argv))
try:
opts, args = getopt.getopt(argv,"d:ni:",["ifile=","dayshift=","negate="])
except getopt.GetoptError as err:
pmsg(str(err))
sys.exit(2)
for opt, arg in opts:
if opt in ("-i", "--ifile"):
inputFile = arg
valid = True
elif opt in ("-d", "--dayshift"):
dayshift = num(arg)
elif opt in ("-n", "--negate"):
negate = True
if valid:
start(inputFile,dayshift,negate)
else:
pmsg("Invalid call")
if __name__ == "__main__":
main(sys.argv[1:])Wiadomo można to jeszcze upiększyć i ulepszyć,
więc kto ma ochotę, zapraszam do poprawek i uwag.