Seite 1 von 1

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

Verfasst: Mittwoch 5. November 2008, 17:15
von azami1986
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

Verfasst: Mittwoch 5. November 2008, 17:18
von HWK
Dieser Thread erklärt Dir das hoffentlich.
MFG
HWK

Verfasst: Mittwoch 5. November 2008, 17:27
von azami1986
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?

Verfasst: Mittwoch 5. November 2008, 18:16
von BlackJack
@azami1986: Das funktioniert ja auch nicht. Du musst schon den ganzen Thread lesen.