Seite 1 von 1

File, das gerade geschrieben wird bewachen und parsen ?

Verfasst: Montag 8. November 2004, 20:41
von Gast
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

Verfasst: Mittwoch 10. November 2004, 02:07
von Beyond
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

Verfasst: Mittwoch 10. November 2004, 14:57
von Gast
@ 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

Verfasst: Donnerstag 11. November 2004, 15:10
von Beyond
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