Quiero ser capaz de obtener el contenido de stdout y stderr cuando corro la siguiente secuencia de comandos en las ventanas utilizando pythonw.exe:subproceso Popen que no trabajan con pythonw.exe
import subprocess
import sys
import os
import string
import time
tmpdir = 'c:/temp'
cmd = 'dir c:'
tmpfile = "tmp_%f" % (time.time())
tmpfile = os.path.normpath(os.path.join(tmpdir,tmpfile))
tmpfile2 = tmpfile+".bat"
tmpfile3 = tmpfile+".txt"
fa = open(tmpfile2,'w')
fa.write("@ECHO OFF > NUL\n")
fa.write('call '+cmd+"\n")
fa.close()
wcmd = []
wcmd.append(tmpfile2)
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess._subprocess.STARTF_USESHOWWINDOW
fb = open(tmpfile3,'w')
fb.write("\n")
fb.write(tmpfile2+"\n")
try:
procval = subprocess.Popen(wcmd, startupinfo=startupinfo, stdout=subprocess.PIPE, stderr=subprocess.STDOUT).communicate()
fb.write(str(procval)+"\n")
fb.write("Sucess")
fb.close()
except:
fb.write(str(procval)+"\n")
fb.write("Failure")
fb.close()
Cuando ejecuto el uso de Python .exe Obtengo el resultado esperado. Cuando lo ejecuto usando pythonw.exe termino en el lado de la excepción. Si ejecuto el comando popen con solo el comando y los indicadores de startupinfo, el comando se completará satisfactoriamente pero no tendrá acceso a los datos en los procesos secundarios. Todo lo que leí dijo que esto debería funcionar, pero debe faltar algo. Cualquier ayuda sería muy apreciada.
Gracias, Randy
¿Ha registrado la información de excepción? – jdi
Lo he intentado pero no con éxito. Esto es bastante fácil de replicar así que cualquier idea sobre cómo obtener la información de excepción y le dará una oportunidad – user1352650
No entiendo. ¿Tiene un código que golpea un bloque genérico excepto pero no puede mostrarnos esa excepción? Cámbielo a: "excepto Excepción, e" y registre el e. O simplemente levante al final para que pueda ver cuál es el error – jdi