[PyQt3] Systemausgabe in Log-Fenster umlenken

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
arlsair
User
Beiträge: 2
Registriert: Sonntag 14. Januar 2007, 17:51

Sonntag 14. Januar 2007, 18:15

Moin,
ich will für ein Python-Programm eine grafische Oberfläche mittel PyQt v3 erstellen. In dem Programm nutzen ich "os.system()" Aufrufe, um Systembefehle auszuführen. Deren Ausgabe würde ich nun gerne in der GUI in ein Log-Fenster umleiten.

Leider konnte ich weder herausfinden, welches Widget nun dafür das geeigneste ist, noch wie man die Ausgabe in dem Log-Fenster umleitet.
Ich habe dazu hier gesucht und gegoogelt, konnte aber keine passenden Code-Schnipsel finden.

Ich bin für jede Hilfe dankbar.
Gruß
Arlsair
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Montag 15. Januar 2007, 06:39

Hi und willkommen im Forum.

Mit PyQT kenne ich mich nicht aus. Aber wie du generell ausgaben von Aufgerufenen Programmen abfangen kannst geht so:

[wiki]Neue Features#Subprocess[/wiki]

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: utf-8 -*-
import subprocess

# Subprozess (DOS befehl *dir* in der cmd) an den namen process binden...
process = subprocess.Popen('dir *.py', shell=True, stdout=subprocess.PIPE,
                            stderr=subprocess.PIPE)
# ...,dan ausführen und solange warten bis der Prozess abgearbeitet wurde.
process.wait()

# Die Ausgabe des Prozessen an stdout an ``proc_output_stdout`` binden.
proc_output_stdout = process.stdout.read()

# Die Ausgabe des Prozessen, an stderr, an ``proc_output_stderr`` binden.
proc_output_stderr = process.stderr.read()
#
#

# Nun brauchst du nur ``proc_output_stdout`` und/oder ``proc_output_stderr``
# in dein selbstgemachtes Log-Window Widget auszugeben.
print proc_output_stdout
``proc_output_stdout`` enthält danach die gesamte Textausgabe die an stdout von dem aufgerufenen Programm gemacht wurde.

lg
arlsair
User
Beiträge: 2
Registriert: Sonntag 14. Januar 2007, 17:51

Samstag 20. Januar 2007, 11:54

Danke, aber leider kann 'subprocess' die Ausgabe nicht gleich ausgeben, sondern erst wenn der Befehl abgearbeitet ist.

Auf der Suche nach einer anderen Sache habe ich im PyQt Wiki den passenden Code gefunden: Capturing_Output_from_a_Process.
Frage mich, wie ich das vorher nicht sehen konnte. Funktioniert aber wunderbar.

Danke nochmal.
Gruß
Arlsair
BlackJack

Samstag 20. Januar 2007, 12:30

arlsair hat geschrieben:Danke, aber leider kann 'subprocess' die Ausgabe nicht gleich ausgeben, sondern erst wenn der Befehl abgearbeitet ist.
Das ist falsch, mit `subprocess` kann man die Ausgaben auch zeilenweise lesen und verarbeiten.
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Samstag 27. Januar 2007, 18:08

BlackJack hat geschrieben:
arlsair hat geschrieben:Danke, aber leider kann 'subprocess' die Ausgabe nicht gleich ausgeben, sondern erst wenn der Befehl abgearbeitet ist.
Das ist falsch, mit `subprocess` kann man die Ausgaben auch zeilenweise lesen und verarbeiten.
Und wie? Es wird erst stdout ausgegeben wen der ``process`` terminiert wurde. Also hat arlsair garnciht unrecht, das erst ``stdout/stderr`` ausgegeben wird, wenn der ``process`` beendet wurde.

Hier der thread wo ich danach gerade gefragt habe: http://www.python-forum.de/topic-9133.html?highlight=

Falls du weißt wie das geht, könntest du mir ja im anderen thread auf die Sprünge helfen :)

lg
Antworten