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
Kalender fuer Terminliste
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
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit )
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.
@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
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.
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.
Ich hab' da mal was zusammengeschustert, vielleicht geht das ja in die Richtung, was Du suchst:
schedule
Um nun Dein Beispiel darzustellen:
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...
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
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...
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit )
Bin gerade eher zufällig über das sched-Modul gestolpert.
Vielleicht kann das ebenfalls ein Teil der Lösung werden...
Gruß
mutetella
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 )
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.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 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.
@deets: Das "calendar"-Modul aus der Standardbibliothek kann keine Kalender-Dateien einlesen. 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.lunar hat geschrieben:Für iCAL und ähnliche Formate muss man auf Drittpakete zurückgreifen.
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...deets hat geschrieben:... aber fuer sowas ist es etwas anstrengend. Da hat man doch gerne ne GUI.
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit )
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]deets hat geschrieben:... aber fuer sowas ist es etwas anstrengend. Da hat man doch gerne ne GUI.
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.
@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.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.