os.system Aufruf in einem Thread aufrufen

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.
piwi
User
Beiträge: 17
Registriert: Montag 18. Januar 2010, 13:37

Dienstag 30. März 2010, 10:31

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
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Dienstag 30. März 2010, 10:40

subprocess.Popen, dann mit poll() schauen, ob das Programm schon fertig ist.
MfG
HWK
piwi
User
Beiträge: 17
Registriert: Montag 18. Januar 2010, 13:37

Dienstag 30. März 2010, 11:25

Danke für deine Hilfe...

das ist der erste aufruf in meiner OnButtonEvent Routine:

Code: Alles auswählen

proc = subprocess.Popen("tftp " +self.host+ " put
+self.filePickerCtrl1.GetPath())
Wo rufe ich nun am besten die proc.poll() Routine auf???
Soll ich dazu einen timer laufen lassen der den Wert alle 500ms abfragt??
lunar

Dienstag 30. März 2010, 12:45

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.
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Dienstag 30. März 2010, 14:55

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
the more they change the more they stay the same
lunar

Dienstag 30. März 2010, 15:05

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.
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Dienstag 30. März 2010, 15:07

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)
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
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Dienstag 30. März 2010, 17:30

Dav1d hat geschrieben:einzigste Event
Nicht böse sein: einzige (einzig kann man nicht mehr steigern).
MfG
HWK
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Dienstag 30. März 2010, 18:09

:oops:
the more they change the more they stay the same
piwi
User
Beiträge: 17
Registriert: Montag 18. Januar 2010, 13:37

Dienstag 30. März 2010, 18:13

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
DasIch
User
Beiträge: 2520
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Dienstag 30. März 2010, 18:18

piwi hat geschrieben:Wenn ihr die Wahl hättet zwischen Qt4 und WX für Python, was würdet ihr empfehlen?????
Wenn man zwei Wahlmöglichkeiten hat und Wx ist eine davon wählt man die andere.
lunar

Dienstag 30. März 2010, 18:20

@piwi: Qt4 ist ganz allgemein sehr empfehlenswert. Einen Vergleich mit wxWidgets kann ich allerdings nicht geben.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Dienstag 30. März 2010, 18:37

piwi hat geschrieben:Wenn ihr die Wahl hättet zwischen Qt4 und WX für Python, was würdet ihr empfehlen?
Hallo piwi!

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.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 30. März 2010, 19:25

DasIch hat geschrieben:
piwi hat geschrieben:Wenn ihr die Wahl hättet zwischen Qt4 und WX für Python, was würdet ihr empfehlen?????
Wenn man zwei Wahlmöglichkeiten hat und Wx ist eine davon wählt man die andere.
Exakt. Na vielleicht von Tkinter abgesehen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
lunar

Dienstag 30. März 2010, 19:31

@Leonidas und DasIch: Und aus welchen objektiven Gründen sollte man das tun?
Antworten