Frage

Es gibt ähnlich questions zu diesem, aber ich möchte eine geklärte Antwort sehen. Ich baue eine einfache GUI mit Python eine Befehlszeile Prozess zu wickeln. Insbesondere ist es ein Wrapper für eine Reihe von ANT Aufgaben und anderen benutzerdefinierten Operationen so nicht-Devs es verwenden kann.

Ich mag die Ausgabe des subprocess zu einem TextArea- im Fenster umleiten. Es sieht aus wie die Art und Weise, dies zu tun ist subprocess.Popen(command, stdout=subprocess.PIPE) zu verwenden und die Ausgabe in eine Variable zu laden.

Die Frage ist, wie kann ich leben mit dem Ausgang des subprocess das Fenster aktualisieren? Für Hinweise wäre willkommen

Danke

War es hilfreich?

Lösung

Fast jeder subprocess Sie wickeln kann, wird seine Ausgabe puffern, wenn Sie verwalten es zu täuschen, zu glauben, es ist tatsächlich mit einem Terminal - und subprocess kann das nicht tun. Vielmehr schauen Sie in pexpect (läuft gut auf jeder Plattform, die Sie haben ein Pseudoterminal können, das heißt, jede Plattform außer Microsoft Windows, Windows Sie könnten versuchen, wexpect aber ich habe keine Erfahrung mit diesen).

Diese Module geben Sie den Ausgang des subprocess sobald es produziert, und danach streben, um das Modul in die Produktion dieser Ausgabe so schnell wie möglich und ohne Pufferung zu täuschen, so sollten sie machen es einfach für Sie, dass die Ausgabe in Echtzeit zu erhalten und hängen Sie ihn an das Textfeld möchten Sie Aktualisierung halten.

Andere Tipps

Ich Suche nach einer Lösung zu für diese. Es stellt sich heraus die Lösung denkbar einfach ist:

proc = subprocess.Popen ( "was auch immer Programm", CWD = "Start dir", Shell = True,     stdout = subprocess.PIPE, Stderr = subprocess.STDOUT)
während True:
    txt = proc.stdout.readline ()
    wenn nicht txt: break
    txt = txt.replace ( "\ r \ n", "\ n"). ersetzen ( "\ r \ n", "\ n"). ersetzen ( "\\", "\")
    self.components.taStdout.appendText (txt)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top