Wie kann subprocess mir während eines Prozesses den...

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.
Antworten
azami1986
User
Beiträge: 20
Registriert: Mittwoch 29. Oktober 2008, 10:35

Hallo Leute,

irgendwie gibt mir subprocess während eines Prozesses nichts zurück. Erst wenn es fertig ist, wird etwas zurück gegeben.


Wenn ich einen Prozess unter cmd starte, dann werden im cmd mehrere "echos" ausgegeben, wie z.B. "10%" und nach einer bestimmten zeit "20%"... usw.

Blöderweise gibt mit subprocess die "echos" erst zurück, wenn es ganz durch ist, also bei 100%.

Ich rufe subprocess folgenderweise auf:

Code: Alles auswählen

myProc = subprocess.Popen(cmd, shell=True,
                         stdout=subprocess.PIPE,
                         stderr=subprocess.PIPE,
                         universal_newlines=True)
Wie kann ich es so machen, dass mir subprocess ständig, d.h. jede Sekunde was ausgibt und nicht wartet bis es fertig ist?

Viele Grüße
Azami
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Dieser Thread erklärt Dir das hoffentlich.
MFG
HWK
azami1986
User
Beiträge: 20
Registriert: Mittwoch 29. Oktober 2008, 10:35

Danke für die Antwort.

Code: Alles auswählen

# -*- coding: utf-8 -*-

import sys, subprocess

IS_WIN = (sys.platform == "win32")

cmd = ["ping", "127.0.0.1"]
if not IS_WIN:
    cmd.append("-c 5")

print " ".join(cmd)
p = subprocess.Popen(cmd, shell=False, stdout=subprocess.PIPE)

line = ""
while p.poll() is None:
    char = p.stdout.read(1)
    if char == "\n":
        print line
        line = ""
    elif IS_WIN and char == "\r":
        continue
    else:
        line += char

print "--- END ---"
Was macht er denn hier anderster als ich?! Er gibt es ja auch ganz normal zurück. Er hat noch eine Schleife reingebaut, ich denke aber nicht, dass das eine heruasragende Rolle spielt, oder?
BlackJack

@azami1986: Das funktioniert ja auch nicht. Du musst schon den ganzen Thread lesen.
Antworten