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