File, das gerade geschrieben wird bewachen und parsen ?

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
Gast

Montag 8. November 2004, 20:41

Hallo, ich bin noch ein python rookie.
Also vergebt mir.

Problem:

Ich wuerde gerne eienen auf einem Farm - node laufenden batchjob ueberwachen,
indem ich dass beim job entstehende output.txt (plain ASCI) von zeit zu zeit parse.
Job lauft im Schnitt so einen Tag.

Idee war das eigentliche Programm des Jobs von einem Python Sript aus zu starten
und dann waerend es laeuft den output zu bewachen. Ich nehme aber mal an das ein
aufruf ala os.system("bla") den pogrammfluss blockiert bis der Job durch ist.

Fragen:

1. Wie starte ich also auf schlauer Art und Weise den Waechter und das Programm?
2. Wie lese ich mueglichst ressourscen sparend ein Textfile schritt fuer schritt waerend es geschrieben wird ?

Danke, Stephan
Beyond
User
Beiträge: 227
Registriert: Freitag 6. September 2002, 19:06
Kontaktdaten:

Mittwoch 10. November 2004, 02:07

Du kannst das File blockend lesen. Falls Du was lesen kannst hat sich was geändert -> Aktion.
Oder mit irgendwelchen os-Routinen (selber schauen!). Dann gibt's noch FAM, damit hatte ich aber schlechte Erfahrung gemacht.
Was für eine Farm ist denn das? Pinguine, Dämonen, Fenster ...

cu beyond
Gast

Mittwoch 10. November 2004, 14:57

@ Beyond
- pinguine stemmen die farm.
- Danke fuer den Tipp werd ich mal probieren (Kannst Du eventuell auch die Syntax fuer blockend lesen posten? Wenn nicht such ich halt mal, ist auch nich schlimm)



Im Moment hab ichs jetzt so geloest:

jobscript startet "watchdogsript.py&" und dann "TheExecuteable > out.txt"

watchdogscript.py
sieht dann so aus:

Code: Alles auswählen

while 1: 
      hol dir infos aus out.txt mit string=file.read()  und string parsen
      verschicke infos mit socket.send(pickle.dumps(infos)) an server
      if (in out.txt steht das TheExecuteable durch ist) :
           break

Ist noch nicht die Krone, aber naja...
bin auf jeden Fall dankbar fuer jede weitere Verbesserung

Stephan
Beyond
User
Beiträge: 227
Registriert: Freitag 6. September 2002, 19:06
Kontaktdaten:

Donnerstag 11. November 2004, 15:10

Also so direkt wollte es mit dem Blocken nicht. Vielleicht geht's mit socket-modul ...
Die Doku war da nicht so klar.
Ich hab' aber 'ne Lösung die geht:

Code: Alles auswählen

import os
f= os.popen('tail -f /verzeichnis/DieDatei')
while "aeons":
   val= f.read(1)
   ...
cu beyond
Antworten