Ejecutar programa externo

Marcos Sánchez Provencio rapto en arrakis.es
Vie Sep 26 09:57:04 CEST 2003


Hola, Gema.

Creo que cada llamada a readlines() intenta agotar el flujo de datos,
bloqueando. Habría que leer poco a poco (línea a línea, carácter a
carácter o muestreando si hay algo disponible), dejando que el flujo de
ejecución del programa siga.

Chao

El jue, 25-09-2003 a las 12:54, Gema Núñez Blázquez escribió:
> Hola lista, vereis tengo una duda. Quiero ejecutar un programa externo
> a traves de python y para eso uso popen3 que me  da 3 salidas:
> salida,entrada y error.
>  
> El problema es que no puede acceder a estos buffers hasta que no
> retorna de la ejecucion del programa externo. Lo que yo quiero es
> poder ir obteniendo la salida a la vez que el programa las va sacando
> para poder seguir el progreso.
>  
> Os mando el trozo de codigo donde iria integrado por si os sirve de
> referencia.
>  
> Muchas gracias por vuestra ayuda
>  
> def comandoEjecutarConEspera(app,lineaComando):
>     retorno=1
>     ruta=os.getcwd()+'>'
>     #lo malo de popen es que hasta que no retorna no me da el
> resultado
>     s1,s2,s3=os.popen3(lineaComando)#Todo lo que saca el programa a
> ejecutar lo obtengo por la salida s2
>     #s1=>entrada s2=>salida s3=>error
>     app.fichLog.escribirEnLog(ruta+lineaComando)
>     app.frmLog.escribirEnTxt(ruta,lineaComando)
>     try:
>         salida=''
>         datos=s2.readlines()
>         if len(datos)>0:
>             for x in datos:
>                 salida=salida+' '+upper(x)
>             app.fichLog.escribirEnLog(' SALIDA EJECUTAR:'+salida)
>         app.frmLog.escribirEnTxt('','',salida)
>         s2.close()
>     except Exception: #no hay salida
>         pass
>     try:
>         errores=''
>         print 'len datos => '+len(datos)
>         datos=s3.readlines()
>         if len(datos)>0:
>             for x in datos:
>                 errores=errores+' '+upper(x)
>             app.fichLog.escribirEnLog(' ERRORES EJECUTAR:'+errores)
>             app.frmLog.escribirEnTxt('','',errores)
>             retorno=-1
>         s3.close()
>     except Exception: #no hay errores
>         #no hay errores
>         pass
>     return retorno    
> 
> 
> 
> ______________________________________________________________________
> Yahoo! Messenger
> Nueva versión: Super Webcam, voz, caritas animadas, y más ¡Gratis!
> 
> ______________________________________________________________________
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es
-- 
Marcos Sánchez Provencio <rapto en arrakis.es>

------------ próxima parte ------------
_______________________________________________
Python-es mailing list
Python-es en aditel.org
http://listas.aditel.org/listinfo/python-es


Más información sobre la lista de distribución Python-es