os.system Aufruf in einem Thread aufrufen
Hallo,
ich habe folgendes Problemstellung in einer wxPython GUI Anwendung:
Ich möchte über die System-Funktion(os.system(...) das "tftp [Host] put [File]" Kommando aufrufen, um ein Embedded System über TFTP upzudaten.
Wenn ich nun den Update-button drücke, ist die Fensterfunktion außergefecht gesetzt. Wie kann ich das am besten regeln, dass in der Zeit, in der das TFTP Kommando ausgeführt wird, ein Balken angezeigt wird, der immer hin und her läuft, um dem User anzuzeigen, das da gerade ein Update läuft????
Schönen Gruß
Piwi
ich habe folgendes Problemstellung in einer wxPython GUI Anwendung:
Ich möchte über die System-Funktion(os.system(...) das "tftp [Host] put [File]" Kommando aufrufen, um ein Embedded System über TFTP upzudaten.
Wenn ich nun den Update-button drücke, ist die Fensterfunktion außergefecht gesetzt. Wie kann ich das am besten regeln, dass in der Zeit, in der das TFTP Kommando ausgeführt wird, ein Balken angezeigt wird, der immer hin und her läuft, um dem User anzuzeigen, das da gerade ein Update läuft????
Schönen Gruß
Piwi
Danke für deine Hilfe...
das ist der erste aufruf in meiner OnButtonEvent Routine:
Wo rufe ich nun am besten die proc.poll() Routine auf???
Soll ich dazu einen timer laufen lassen der den Wert alle 500ms abfragt??
das ist der erste aufruf in meiner OnButtonEvent Routine:
Code: Alles auswählen
proc = subprocess.Popen("tftp " +self.host+ " put
+self.filePickerCtrl1.GetPath())
Soll ich dazu einen timer laufen lassen der den Wert alle 500ms abfragt??
Grundsätzlich musst Du an subprocess.Popen eine Liste übergeben, die jedes Argument in einem eigenen Element enthält.
Ansonsten ist es für diese Zwecke empfehlenswert, die Prozess-Klasse des verwendeten GUI-Toolkits zu verwenden, sofern es eine besitzt.
Ansonsten ist es für diese Zwecke empfehlenswert, die Prozess-Klasse des verwendeten GUI-Toolkits zu verwenden, sofern es eine besitzt.
wxPython besitzt eine Prozessklasse wx.Process
Allerdings kann man genauso subprocess verwenden, es sollte zu keinem Fehler kommen (Ich habe die Frage: "Lieber wx.Process anstatt subprocess?" auch schon in #wxPython auf freenode gestellet, an einen Developer)
wxPython bringt auch einen eigenen Timer mit: wx.Timer(self).start(500), alle 500ms wird ein wx.EVT_TIMER gesendet
Allerdings kann man genauso subprocess verwenden, es sollte zu keinem Fehler kommen (Ich habe die Frage: "Lieber wx.Process anstatt subprocess?" auch schon in #wxPython auf freenode gestellet, an einen Developer)
wxPython bringt auch einen eigenen Timer mit: wx.Timer(self).start(500), alle 500ms wird ein wx.EVT_TIMER gesendet
the more they change the more they stay the same
Fehler gibt es sicherlich nicht, aber möglicherweise ist wxProcess einfacher zu nutzen. Ich kenne wx nicht, insofern kann ich nicht sagen, ob das tatsächlich so ist.
Bei Qt4 beispielsweise bietet QProcess den Vorteil, dass es Signale und Slots unterstützt, und sich in die Ereignisschleife integriert. Man muss also nicht manuell prüfen, ob der Prozess sich beendet hat, oder ob Ausgabe bereit steht, sondern erhält völlig automatisch ein Signal. Das macht die Verwendung von QProcess wesentlich einfacher gegenüber subprocess.
Dann ist auch kein Polling mehr nötig.
Bei Qt4 beispielsweise bietet QProcess den Vorteil, dass es Signale und Slots unterstützt, und sich in die Ereignisschleife integriert. Man muss also nicht manuell prüfen, ob der Prozess sich beendet hat, oder ob Ausgabe bereit steht, sondern erhält völlig automatisch ein Signal. Das macht die Verwendung von QProcess wesentlich einfacher gegenüber subprocess.
Dann ist auch kein Polling mehr nötig.
Oh ja, klar wx.Process, teilt dem "parent" ja per wx.EVT_END_PROCESS mit, wenn der Prozess am Ende ist
AFAIR, ist es das einzigste Event (EVT_END_PROCESS)
AFAIR, ist es das einzigste Event (EVT_END_PROCESS)
Zuletzt geändert von Dav1d am Dienstag 30. März 2010, 18:09, insgesamt 1-mal geändert.
the more they change the more they stay the same

the more they change the more they stay the same
vielen dank für die vielen Antwort.
Habe es jetzt mit dem wx.Timer gelöst und es funktioniert...
Werde mir auch noch mal die wx.Process Klasse angucken.
Wenn ihr die Wahl hättet zwischen Qt4 und WX für Python, was würdet ihr empfehlen?????
SChönen Gruß
Piwi
Habe es jetzt mit dem wx.Timer gelöst und es funktioniert...
Werde mir auch noch mal die wx.Process Klasse angucken.
Wenn ihr die Wahl hättet zwischen Qt4 und WX für Python, was würdet ihr empfehlen?????
SChönen Gruß
Piwi
@piwi: Qt4 ist ganz allgemein sehr empfehlenswert. Einen Vergleich mit wxWidgets kann ich allerdings nicht geben.
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo piwi!piwi hat geschrieben:Wenn ihr die Wahl hättet zwischen Qt4 und WX für Python, was würdet ihr empfehlen?
wxPython und "wxPython in Action"
Einzige Ausnahme: wenn du KDE-Programme schreiben möchtest

mfg
Gerold

http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Exakt. Na vielleicht von Tkinter abgesehen.DasIch hat geschrieben:Wenn man zwei Wahlmöglichkeiten hat und Wx ist eine davon wählt man die andere.piwi hat geschrieben:Wenn ihr die Wahl hättet zwischen Qt4 und WX für Python, was würdet ihr empfehlen?????
My god, it's full of CARs! | Leonidasvoice vs Modvoice