ich starte mit subprocess.popen(...) einen neuen Prozess und lese dann dessen Ausgabe. Klappt auch wunderbar, nur öffnet sich bei einem Kollegen jedesmal ein Konsolenfesnter(cmd.exe), welches sich auch gleich wieder schließt (Prozess zu Ende). Bei mir zeigt sich dieses Verhalten nicht, obwohl ich ebenfalls WindowsXP-SP2 am Laufen habe. Python-Version ist dieselbe.
Ist ein bisschen nervig, da ich mit xcopy mehrere Dateien kopiere und entsprechend oft ein neuer Prozess gestartet wird.
Wie kann ich das "aufpoppen" der Konsole verhindern?
Hier der Code:
Code: Alles auswählen
def runProcess(self, cmd, name):
try:
exec_dir = os.getcwd()
if verboseFlg:
if gui == True:
# self.printer("opening process %s" % " ".join(cmd), self.tabNum, myout['std'])
p = Popen(cmd, bufsize=1, cwd=exec_dir, stderr=subprocess.STDOUT, stdout=PIPE) #redirect stderr to stdout and stdout to pipe
# self.printer("process opened", self.tabNum, myout['std'])
#reading from pipe
with p.stdout as f:
# self.printer("reading to buffer", self.tabNum, myout['info'])
read_data = f.read() # read() blocks until buffer is full or subprocess returns
self.printer(read_data, self.tabNum, myout['ext'])
f.closed
# self.printer("process closed", self.tabNum, myout['std'])
else:
subprocess.check_call(cmd, bufsize=1, cwd=exec_dir)
else:
fnull = open(os.devnull, "w")
subprocess.check_call(cmd, bufsize=1, cwd=exec_dir, stderr=fnull, stdout=fnull)
fnull.close()
except subprocess.CalledProcessError,e:
self.printer("%s failed" % name, self.tabNum, myout['err'])
else:
# self.printer("%s finished" % name, self.tabNum, myout['std'])
pass