<DIV>Gracias, es verdad que estaba cambiado de orden los parametros al crear el proceso, pero el que tengo que utilizar es el manejador del proceso y no el del hilo.</DIV>
<DIV>&nbsp;</DIV>
<DIV>Ahora el problema que me da es que no tengo acceso a la tuberia, como si estuviera bloqueada por el proceso y no me dejara leer mientras esta escribiendo. La excepcion es la siguiente:</DIV>
<DIV>&nbsp;</DIV>
<DIV>Traceback (most recent call last):<BR>&nbsp; File "pruebaWin32Process3.py", line 54, in ?<BR>pywintypes.api_error: (5, 'GetNamedPipeHandleState', 'Acceso denegado.')</DIV>
<DIV>&nbsp;</DIV>
<DIV>Te vuelvo a mandar el codigo por si te sirve de ayuda.</DIV>
<DIV>&nbsp;</DIV>
<DIV>import win32process<BR>import win32pipe<BR>import win32api<BR>import win32con<BR>import win32security<BR>import os,time</DIV>
<DIV>if __name__ == "__main__":<BR>&nbsp;&nbsp;&nbsp; cmdline="D:\\Programa.exe"<BR>&nbsp;&nbsp;&nbsp; """Creates a new process which uses the specified handles for its standard<BR>&nbsp;&nbsp;&nbsp; input, output, and error. The handles must be inheritable. 0 can be passed<BR>&nbsp;&nbsp;&nbsp; as a special handle indicating that the process should inherit the current<BR>&nbsp;&nbsp;&nbsp; process's input, output, or error streams, and None can be passed to discard<BR>&nbsp;&nbsp;&nbsp; the child process's output or to prevent it from reading any input."""</DIV>
<DIV>&nbsp;&nbsp;&nbsp; # initialize new process's startup info<BR>&nbsp;&nbsp;&nbsp; sAttrs=win32security.SECURITY_ATTRIBUTES()<BR>&nbsp;&nbsp;&nbsp; hPipeIn, hPipeOut=win32pipe.CreatePipe(sAttrs, 0)</DIV>
<DIV>&nbsp;&nbsp;&nbsp; si = win32process.STARTUPINFO()<BR>&nbsp;&nbsp;&nbsp; si.dwFlags = win32process.STARTF_USESTDHANDLES</DIV>
<DIV>&nbsp;&nbsp;&nbsp; si.hStdInput=hPipeIn<BR>&nbsp;&nbsp;&nbsp; si.hStdOutput=hPipeOut</DIV>
<DIV>&nbsp;&nbsp;&nbsp; # create the process<BR>&nbsp;&nbsp;&nbsp; processhandle, threadhandle,pid, tid = win32process.CreateProcess \<BR>&nbsp;&nbsp;&nbsp; ( None,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # appName<BR>&nbsp;&nbsp;&nbsp; cmdline,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # commandLine<BR>&nbsp;&nbsp;&nbsp; None,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # processAttributes<BR>&nbsp;&nbsp;&nbsp; None,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #
 threadAttributes<BR>&nbsp;&nbsp;&nbsp; 1,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # bInheritHandles<BR>&nbsp;&nbsp;&nbsp; win32con.NORMAL_PRIORITY_CLASS,&nbsp;&nbsp;&nbsp; # dwCreationFlags<BR>&nbsp;&nbsp;&nbsp; None,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # newEnvironment<BR>&nbsp;&nbsp;&nbsp; None,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # currentDirectory<BR>&nbsp;&nbsp;&nbsp;
 si&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # startupinfo<BR>&nbsp;&nbsp;&nbsp; )</DIV>
<DIV>&nbsp;&nbsp;&nbsp; print 'voy a entrar al bucle'<BR>&nbsp;&nbsp;&nbsp; contador=2 #contador de espera<BR>&nbsp;&nbsp;&nbsp; while 1:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print 'iteracion '+str(win32process.GetExitCodeProcess(processhandle))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (win32process.GetExitCodeProcess(processhandle) &gt;=1):#codigo del proceso<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if contador==0:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print 'Termino el proceso'<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; win32api.TerminateProcess(processhandle,-1)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buffer, bytesToRead, ignore = win32pipe.PeekNamedPipe(hPipeOut,
 0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print 'valor salida '+str(buffer)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; contador=contador-1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; time.sleep(10)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print 'salgo del bucle'<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break&nbsp;&nbsp;&nbsp; <BR><BR><B><I>Chema_Cortés &lt;ch3m4@ch3m4.org&gt;</I></B> wrote:</DIV>
<BLOCKQUOTE class=replbq style="BORDER-LEFT: #1010ff 2px solid; MARGIN-LEFT: 5px; PADDING-LEFT: 5px">Gema Núñez Blázquez escribió:<BR>&gt; Perdonad por ser tan pesada con el temita pero es que no me termina de <BR>&gt; salir. Siguiendo tu consejo he utilizado win32process y win32pipe, y <BR>&gt; consigo que el proceso se ejecute y me de el manejador para poder <BR>&gt; preguntar si sigue vivo. Mi problema es que no soy capaz de leer la <BR>&gt; tuberia de salida ni de error:<BR>&gt; <BR>&gt; buffer, bytesToRead, ignore = <BR>&gt; win32pipe.PeekNamedPipe(si.hStdOutput, 0)<BR>&gt; print 'valor salida '+str(buffer)<BR>&gt; <BR>&gt; porque me da el siguiente error:<BR>&gt; Traceback (most recent call last):<BR>&gt; File "pruebaWin32Process3.py", line 47, in ?<BR>&gt; pywintypes.api_error: (6, 'GetNamedPipeHandleState', 'Controlador no <BR>&gt; v\xe1lido.'<BR>&gt; )<BR>&gt; <BR>&gt; se supone que el manejador del pipe está en si.hStdOutput, ¿no?<BR><BR>Pues yo diría que no, ya que
 
  en
 realidad no has creado ningún pipe. Al <BR>crear el proceso, en lugar de conectarlo a las entradas/salidas del <BR>proceso padre deberías conectarlo a un pipe para procesarlas:<BR><BR>sAttrs=win32security.SECURITY_ATTRIBUTES()<BR>hPipeIn, hPipeOut = win32pipe.CreatePipe(sAttrs, 0)<BR><BR>...<BR>si.hStdOutput = hPipeOut<BR><BR><BR>Así mismo, creo que tiene un error en<BR><BR>&gt; # create the process<BR>&gt; phandle, pid, thandle, tid = win32process.CreateProcess \<BR><BR>está mal el orden. Sería (phandle, thandle, pid, tid), siendo thandle el <BR>handle del proceso hijo, no phandle como parace que estás usando.<BR><BR><BR><BR>-- <BR>Res publica non dominetur<BR><BR><BR>_______________________________________________<BR>Python-es mailing list<BR>Python-es@aditel.org<BR>http://listas.aditel.org/listinfo/python-es</BLOCKQUOTE><p><hr size=1><font face="Arial" size="-1" color="#FF8000"><b>Yahoo! Messenger</b></font><br><font face="Arial" size="-1" color="black"><a
 href=http://es.rd.yahoo.com/mail_es/tagline/messenger/*http://es.messenger.yahoo.com/><b>Nueva versi&oacute;n</b></a>: Super Webcam, voz, caritas animadas, y m&aacute;s &#161;Gratis!</font>