clase Popen3 en Windows
Chema Cortés
ch3m4 en ch3m4.org
Jue Oct 2 19:44:10 CEST 2003
Gema Núñez Blázquez escribió:
> Perdonad por ser tan pesada con el temita pero es que no me termina de
> salir. Siguiendo tu consejo he utilizado win32process y win32pipe, y
> consigo que el proceso se ejecute y me de el manejador para poder
> preguntar si sigue vivo. Mi problema es que no soy capaz de leer la
> tuberia de salida ni de error:
>
> buffer, bytesToRead, ignore =
> win32pipe.PeekNamedPipe(si.hStdOutput, 0)
> print 'valor salida '+str(buffer)
>
> porque me da el siguiente error:
> Traceback (most recent call last):
> File "pruebaWin32Process3.py", line 47, in ?
> pywintypes.api_error: (6, 'GetNamedPipeHandleState', 'Controlador no
> v\xe1lido.'
> )
>
> se supone que el manejador del pipe está en si.hStdOutput, ¿no?
Pues yo diría que no, ya que en realidad no has creado ningún pipe. Al
crear el proceso, en lugar de conectarlo a las entradas/salidas del
proceso padre deberías conectarlo a un pipe para procesarlas:
sAttrs=win32security.SECURITY_ATTRIBUTES()
hPipeIn, hPipeOut = win32pipe.CreatePipe(sAttrs, 0)
...
si.hStdOutput = hPipeOut
Así mismo, creo que tiene un error en
> # create the process
> phandle, pid, thandle, tid = win32process.CreateProcess \
está mal el orden. Sería (phandle, thandle, pid, tid), siendo thandle el
handle del proceso hijo, no phandle como parace que estás usando.
--
Res publica non dominetur
Más información sobre la lista de distribución Python-es