Neuen Prozess starten und Änderungen an der Ausgabe

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
glar00k
User
Beiträge: 5
Registriert: Montag 21. Juli 2003, 18:40

Hallo,

also vorweg: Habe noch kaum mit Python Programmiert, bin also noch am lernen ;)

Folgende Situation:

Ich habe eine Gui (GTK) und möchte per Consolentools bestimmte Aufgaben erledigen.

Die erste Aufgabe soll einfach sein, die Ausgabe eines Befehls auszulesen und zu verarbeiten. Das Verarbeiten ist nicht das Problem, aber wie komme ich an die Ausgabe des Befehls, die ich dann z.B. zeilenweise auslesen kann? Damit in der Zwischenzeit, solang der Befehl noch nicht beendet wurde, sich die Gui noch bedienen lässt, müsste ich einen neuen Prozess starten, oder? Nun, welche Module und Funktionen sollte ich mir diesbezüglich anschauen? Gibt es da eventuell Tutorials oder habt Ihr Tipps dafür?

Die zweite Aufgabe soll sein, einen weiteren Befehl (später) Auszuführen und dynamisch (Fortschrittsbalken) auf die Ausgabe zu reagieren. D.h. wenn sich die letzte Zeile der Ausgabe des Befehls ändert, soll eine Funktion aufgerufen werden, die die Ausgabe auswertet und den Fortschrittsbalken der GUI verändert. Und hier müsste ich auch einen eigenen Prozess starten, oder? Gibt es hierzu auch irgendetwas was man lesen sollte?

Grüße,

glar00k
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

glar00k hat geschrieben:Hallo,

also vorweg: Habe noch kaum mit Python Programmiert, bin also noch am lernen ;)
Hallo glar00k,
Folgende Situation:

Ich habe eine Gui (GTK) und möchte per Consolentools bestimmte Aufgaben erledigen.

Die erste Aufgabe soll einfach sein, die Ausgabe eines Befehls auszulesen und zu verarbeiten. Das Verarbeiten ist nicht das Problem, aber wie komme ich an die Ausgabe des Befehls, die ich dann z.B. zeilenweise auslesen kann? Damit in der Zwischenzeit, solang der Befehl noch nicht beendet wurde, sich die Gui noch bedienen lässt, müsste ich einen neuen Prozess starten, oder? Nun, welche Module und Funktionen sollte ich mir diesbezüglich anschauen? Gibt es da eventuell Tutorials oder habt Ihr Tipps dafür?
Dafür bietet sich an den Befehl mit spawn aus dem os-Modul zu starten siehe http://www.python.org/doc/current/lib/os-process.html mit dem mode-Parameter P_NOWAIT.
Die zweite Aufgabe soll sein, einen weiteren Befehl (später) Auszuführen und dynamisch (Fortschrittsbalken) auf die Ausgabe zu reagieren. D.h. wenn sich die letzte Zeile der Ausgabe des Befehls ändert, soll eine Funktion aufgerufen werden, die die Ausgabe auswertet und den Fortschrittsbalken der GUI verändert. Und hier müsste ich auch einen eigenen Prozess starten, oder? Gibt es hierzu auch irgendetwas was man lesen sollte?
die Ausgabe des Befehls, den Du mit os.spawn startest, kannst Du in eine Pipe schreiben lassen und dann mit einer eigenen Funktion, die z.B. über eine gtk-Timeout-Handler alle halbe Sekunde aufgerufen wird, auslesen und in ein Statusbar-widget ausgeben. zum gtk-Timeout-Handler siehe http://www.moeraki.com/pygtktutorial/py ... c-Timeouts
Grüße,

glar00k
Gruß

Dookie
glar00k
User
Beiträge: 5
Registriert: Montag 21. Juli 2003, 18:40

Hallo,

vielen Dank erstmal, damit weiß ich ja schonmal wie ich einen weiteren Prozess starten kann. Doch leider konnte ich bisher noch nichts über die Pipe herausfinden. Pipe kenn ich ja bisher eher von der Shell ( | ), aber damit wirds ja wohl nix zu tun haben. Nun, ich weiß eben immernoch nicht wie ich an die Ausgabe des Programmes herankomme. Hab schon die Doku Page von Python durchforstet aber noch nicht herausgefunden, wie ich an die Ausgabe des Programms komme.

Sorry dass ich nochmal fragen muss, also ... wo muss ich für die Pipe, oder wie auch immer ich an die Ausgabe eines mit spawn* gestarteten Prozesses komme, weiterlesen?

Gruß,

glar00k

edit:
Nun, popen* scheint wohl das zu sein, was ich suche ...
Antworten