Kalender fuer Terminliste

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
s-markus
User
Beiträge: 3
Registriert: Samstag 19. März 2011, 00:50

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
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

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?
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
s-markus
User
Beiträge: 3
Registriert: Samstag 19. März 2011, 00:50

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.
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:

Code: Alles auswählen

In [29]: datetime.datetime.now().weekday()
Out[29]: 5
s-markus
User
Beiträge: 3
Registriert: Samstag 19. März 2011, 00:50

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.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

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... :wink:
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Bin gerade eher zufällig über das sched-Modul gestolpert.
Vielleicht kann das ebenfalls ein Teil der Lösung werden...

Gruß
mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
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.
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.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

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...
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
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.
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.
Antworten