Seite 1 von 1
Kalender fuer Terminliste
Verfasst: Samstag 19. März 2011, 00:58
von s-markus
Ich habe eine Python Script mit dem ich sehr viele Jobs auf sehr viele Rechner verteilen kann und habe aber noch das Problem das ich nicht jeden Rechner zu jeder Zeit benutzen darf. Diese Script hat als Input ein XML Files mit den Jobs und den Rechnern.
Ich suche nun etwas um pro Rechner eine Terminliste anzulegen. Also so eine Art Kalender fuer Zeitfenster pro Rechner. DAnn wuerde ich immer fuer die aktelule Zeit pruefen ob es ein Zeitfenster auf einem Rechner gibt und dann rechnen.
Die Sache soll moeglichst flexibel sein. Also ich moechte z.B. sagen dass ich am 01.05.2012 von 18:00 Uhr bis 18:21 Uhr und vorher immer Montag - Freitag jeweils 0:00 Uhr bis 6:00 Uhr rechnen moechte.
Kennt jemand ein Python Modul mit dem man anfangen koennte das zu implementieren - also eins was vielleicht schon einen Teil davon kann?
Viele Gruesse
Markus
Re: Kalender fuer Terminliste
Verfasst: Samstag 19. März 2011, 19:19
von mutetella
Code: Alles auswählen
In [1]: import datetime
In [2]: start = datetime.datetime(2011,3,19,18,00)
In [3]: end = datetime.datetime(2011,3,19,18,21)
In [4]: current = datetime.datetime(2011,3,19,18,5)
In [5]: start < current < end
Out[5]: True
In [6]: current = datetime.datetime(2011,3,19,18,22)
In [7]: start < current < end
Out[7]: False
Meinst Du sowas?
Re: Kalender fuer Terminliste
Verfasst: Samstag 19. März 2011, 19:45
von s-markus
Ja, so in etwa. Das was du da geschrieben hast hab ich schon. Also mit nur einem Zeitfenster pro Rechner. Ich möchte aber wie in meinem Post beschrieben mehrer Zeitfenster angeben, also z.B .Mo-Fr 8 - 15 Uhr. Also eine Teminliste pro Rechner.
Re: Kalender fuer Terminliste
Verfasst: Samstag 19. März 2011, 20:04
von BlackJack
@s-markus: Na dann musst Du halt prüfen welchen Wochentag wir haben und dann ob eine Zeitspanne im Fenster liegt. Heutiger Wochentag als Zahl:
Re: Kalender fuer Terminliste
Verfasst: Samstag 19. März 2011, 21:31
von s-markus
Ich glaube es ist noch nicht ganz klar nach was ich suche. Vielleicht ist es auch zu speziell, sodass ich das selbst implementieren muss.
Also ich brauch ja letzlich irgendeinen String der die Zeitfenster beschreibt. Z.B.
01.01.2010-01.01.2012: Mo-Fr 8-15; 21.07.2025 7:30-9:15;
Also mehrere Zeitfenster pro Rechner, die sowohl wiederholend also auch einmalig sein können.
Ich hatte mir jetzt eingebildet, das es in python für sowas schon ein package gibt. Bisher gabs für alles was ich gebraucht habe etwas.
Ich könnte mir vorstellen, dass man etwas vergleichbares für einen Kalender, Fahrplan, Stunden- oder Studienplan, Dienstplan usw. gebrauchen könnte.
Selbst implementieren ist auch eine Option, aber man kann ja vorher mal fragen ob jemand sowas schon mal generisch gemacht hat.
Re: Kalender fuer Terminliste
Verfasst: Sonntag 20. März 2011, 01:04
von mutetella
Ich hab' da mal was zusammengeschustert, vielleicht geht das ja in die Richtung, was Du suchst:
schedule
Um nun Dein Beispiel darzustellen:
Code: Alles auswählen
In [37]: s = schedule.WeeklySchedule(base_datetime=datetime.datetime(2010,1,1,8,0), duration=25200, end_datetime=datetime.datetime(2012,1,1,15,0), days=[0, 1, 2, 3, 4])
In [38]: s.is_match(datetime.datetime(2010,1,1,8,0))
Out[38]: True
In [39]: s.is_match(datetime.datetime(2010,1,2,8,0))
Out[39]: False
In [40]: s.is_match(datetime.datetime(2010,1,4,12,7))
Out[40]: True
In [41]: s.is_match(datetime.datetime(2012,1,4,12,7))
Out[41]: False
Auf der Grundlage von 'Schedule()' lassen sich so auch tägliche, monatliche oder jährliche Zeitrahmen basteln.
Bin mir aber nicht sicher, ob das ganze vielleicht noch einfacher zu machen wäre...
Gruß
mutetella
EDIT: Sollte ich noch erwähnen: duration = Angabe in Sekunden, days = Liste mit Wochentagen (0=Montag .. 6=Sonntag)
EDIT 2: Nochmal was vergessen: interval gibt an, ob der angegebene Zeitrahmen wöchentlich, 2-wöchentlich, ... gültig sein soll. Und den 'iter_datetime()'-Generator in meinem Codesnippet braucht es so nicht mehr, hab' ich vergessen, rauszunehmen... sorry, war einfach schon spät...

Re: Kalender fuer Terminliste
Verfasst: Sonntag 20. März 2011, 22:14
von mutetella
Bin gerade eher zufällig über das
sched-Modul gestolpert.
Vielleicht kann das ebenfalls ein Teil der Lösung werden...
Gruß
mutetella
Re: Kalender fuer Terminliste
Verfasst: Montag 21. März 2011, 00:24
von deets
s-markus hat geschrieben:Ich glaube es ist noch nicht ganz klar nach was ich suche. Vielleicht ist es auch zu speziell, sodass ich das selbst implementieren muss.
Also ich brauch ja letzlich irgendeinen String der die Zeitfenster beschreibt. Z.B.
01.01.2010-01.01.2012: Mo-Fr 8-15; 21.07.2025 7:30-9:15;
Also mehrere Zeitfenster pro Rechner, die sowohl wiederholend also auch einmalig sein können.
Das Problem ist nicht so sehr die Verfuegbarkeit eines Moduls. mutetella hat gezeigt, dass man da mit dem Standard-datetime-Modul schon im Grunde mehr oder minder da ist.
Das nervige daran ist nur, dass egal was du machst, du immer Python programmieren musst, um deine Zeitraeume zu definieren. Nicht, das programmieren in Python doof waere, aber fuer sowas ist es etwas anstrengend. Da hat man doch gerne ne GUI.
Hast du mal daran gedacht, eine Kalender-Software zu verwenden? Es gaebe verschiedene Moeglichkeiten. ZB Sunbird. Damit koenntest du pro Rechner einen Kalender verwalten. Die GUI kann dann Dinge wie wiederholende Termine usw. Vielleicht geht auch Chandler, oder natuerlich iCal, wenn du nen Mac hast. Und last but not least google calendar.
Dann musst du halt noch ein Stueck code haben, dass den Kalender einliest, und bestimmt, ob "jetzt" gerade ein guter Moment fuer's loslaufen ist. Dafuer gibt es Python-Module, zb calendar.
Re: Kalender fuer Terminliste
Verfasst: Montag 21. März 2011, 07:18
von lunar
@deets: Das "calendar"-Modul aus der Standardbibliothek kann keine Kalender-Dateien einlesen. Für iCAL und ähnliche Formate muss man auf Drittpakete zurückgreifen.
Re: Kalender fuer Terminliste
Verfasst: Montag 21. März 2011, 08:17
von mutetella
lunar hat geschrieben:Für iCAL und ähnliche Formate muss man auf Drittpakete zurückgreifen.
... z. B.
iCalendar, wobei ich jetzt nicht weiß, ob das nicht sogar das einzige Modul dafür ist.
deets hat geschrieben:... aber fuer sowas ist es etwas anstrengend. Da hat man doch gerne ne GUI.
Weshalb anstrengend? Mit dem datetime- und wenn nötig noch dem calendar-Modul lassen sich doch gerade solche Sachen gut realisieren. Ich stelle mir da den Umweg über Sunbird und Kollegen nicht wirklich einfacher vor...
Re: Kalender fuer Terminliste
Verfasst: Montag 21. März 2011, 12:37
von deets
deets hat geschrieben:... aber fuer sowas ist es etwas anstrengend. Da hat man doch gerne ne GUI.
Weshalb anstrengend? Mit dem datetime- und wenn nötig noch dem calendar-Modul lassen sich doch gerade solche Sachen gut realisieren. Ich stelle mir da den Umweg über Sunbird und Kollegen nicht wirklich einfacher vor...[/quote]
Das ist natuerlich auch eine Geschmackssache. Aber es geht doch darum, auf moeglichst einfache Art regelmaessig neu zu konfigurieren, wann etwas laufen darf, auf einem bestimmten Rechner. Und das finde ich deutlich einfacher, wenn ich pro Rechner einen Kalender verwalte, als eine Source-Datei mit allen moeglichen Daten drin, die ich dann auch noch vor meinem inneren Auge visualisieren muss.
Re: Kalender fuer Terminliste
Verfasst: Montag 21. März 2011, 12:38
von deets
lunar hat geschrieben:@deets: Das "calendar"-Modul aus der Standardbibliothek kann keine Kalender-Dateien einlesen. Für iCAL und ähnliche Formate muss man auf Drittpakete zurückgreifen.
@lunar: ich wusste noch nicht mal, dass es ein standard-modul calendar gab... ich habe mal ein Modul verwendet fuer ICS-Dateien, aber das wahr dann wahrscheinlich "icalendar". Tut mir leid fuer die Verwirrung.