Externes C++ Programm aus Python/Tkinter Oberfläche aufrufen
Verfasst: Freitag 23. Mai 2003, 10:52
Hallo!
Ich versuche gerade ein C++ Programm aus einem mit Tkinter erstellten GUI aufzurufen. Ausserdem hätte ich gerne, dass mein GUI mir Bescheid sagt, ob das Programm noch läuft oder nicht. Allerdings funktioniert das nicht so, wie ich mir das vorstelle.
Zunächst einige Programmschnipsel:
Ich habe also einen "RUN"-Button, auf den ich drücken möchte, dann startet das externe Programm, und meine Oberfläche funktioniert weiterhin. Das Programm muss abgekoppelt werden, da es eine Laufzeit von ca 1h hat. Dann habe ich in meinem GUI das Wort "Staus" stehen, welches rot ist, während das Programm läuft und grün wenn das Programm fertig ist!
Das funktioniert auch alles soweit. Nur das das externe Programm nix tut! Es wird gestartet und läuft dann mit 0% CPU im Sleep-Modus vor sich hin.
An dem externen Programm und den übermittelten Parametern liegts nicht. Wenn ich die check_status Funktion deaktiviere, läuft das externe Programm mit 99% CPU...
Achja, ich arbeite mit Mandrake Linux 9.1; Python 2.2.2.
Ok, Problem ausreichend beschrieben?! Ich wäre dankbar für eine Erklärung, wieso das nicht funktioniert, bzw. wie macht mans "richtig"?
Besten Dank!
Philipp
Ich versuche gerade ein C++ Programm aus einem mit Tkinter erstellten GUI aufzurufen. Ausserdem hätte ich gerne, dass mein GUI mir Bescheid sagt, ob das Programm noch läuft oder nicht. Allerdings funktioniert das nicht so, wie ich mir das vorstelle.
Zunächst einige Programmschnipsel:
Code: Alles auswählen
[...]
def create_widgets(self):
[...]
self.RUN_button["command"] = self.RUN_PROGRAMM
[...]
self.RUN_PROGRAMM_now_status_var=StringVar()
self.RUN_PROGRAMM_now_status = Label (root, textvariable=self.RUN_PROGRAMM_now_status_var)
self.RUN_PROGRAMM_now_status.configure(fg="blue")
self.RUN_PROGRAMM_now_status_var.set("Status")
[...]
self.master.after(1000, self.check_status)
[...]
def RUN_PROGRAMM(self):
self.RUNNING_PROGRAMM=popen2.Popen3(PROGRAMM)
self.programm_laeuft=1
def check_status(self):
if self.programm_laeuft==1:
self.RUN_PROGRAMM_now_status.configure(fg="red")
if self.RUNNING_PROGRAMM:
print self.RUNNING_PROGRAMM.poll()
if self.RUNNING_PROGRAMM.poll()!=-1:
self.programm_laeuft=0
else:
self.RUN_PROGRAMM_now_status.configure(fg="green")
self.master.after(1000, self.check_status)
[...]
Das funktioniert auch alles soweit. Nur das das externe Programm nix tut! Es wird gestartet und läuft dann mit 0% CPU im Sleep-Modus vor sich hin.
An dem externen Programm und den übermittelten Parametern liegts nicht. Wenn ich die check_status Funktion deaktiviere, läuft das externe Programm mit 99% CPU...
Achja, ich arbeite mit Mandrake Linux 9.1; Python 2.2.2.
Ok, Problem ausreichend beschrieben?! Ich wäre dankbar für eine Erklärung, wieso das nicht funktioniert, bzw. wie macht mans "richtig"?
Besten Dank!
Philipp