Capturar la salida de un programa desde un frontend

Ernesto Revilla aerd en retemail.es
Lun Mayo 5 21:47:35 CEST 2003


Así lo hice yo:

Otra posibilidad es simular un archivo mediante un FIFO auténticamente
Python como esto:
# Queue es justo lo que necesitamos
import sys
from Queue import Queue

class MsgQueue(Queue):
    def __init__(self):
        Queue.__init__(self,500)

    def write(self,msg):
        self.put(msg)

class App:
    def principal(self):
        self.orgstdout=sys.stdout                    # guardar el stdout
original
        sys.stdout=self.queue=MsgQueue()   # creamos el FIFO y lo asignamos
a stdout
        loopDeLaAplicacionGrafica()            # en Tkinter es mailoop
        sys.stdout=self.orgstdout                    # recuperar stdout
original

def procesoperiodico():
    if not sys.stdout.empty():
         self.textbox.append(self.queue.get())   # agregamos a nuestro
textbox (o lo que sea)

El proceso periódico puede programarse en Tkinter, pero supongo que los
otros marcos también permiten. En caso contrario y si la librería gráfica
permite uso multihebra, siempre puedes crearte un thread aparte que cada
décima de segundo ejecuta el proceso periódico y se vaya a dormir (mediante
time.sleep).

Espero que ha quedado claro.
Erny


----- Original Message -----
From: "Chema Cortés" <py en ch3m4.org>
To: "La lista de python en castellano" <python-es en aditel.org>
Sent: Monday, May 05, 2003 12:54 AM
Subject: Re: [Python-es] Capturar la salida de un programa desde un frontend


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

El Sáb 03 May 2003 15:38, Carles Sadurní Anguita escribió:

> ¿Cómo se puede capturar la salida de un programa a medida que se
> produce?
>
> ¿Sería mucho pedir que el método fuese independiente del sistema? :-)

Viendo lo que es tu script, estás creando un log de conexiones. Lo más
simple
es que vayas chequeando periódicamente el tamaño del fichero y, cuando
cambie, lees lo que se haya añadido. Te pongo el código en Tkinter:

#!/usr/bin/env python

import sys,os
import time
from Tkinter import *
from ScrolledText import ScrolledText

class LogViewer(Frame):
    def __init__(self, parent, filename):
        Frame.__init__(self,parent,relief=RIDGE, borderwidth=20)
        self.filename = filename
        self.file = open(filename, 'r')
        self.text = ScrolledText(parent)
        self.text.pack(fill=BOTH)
        data = self.file.read()
        self.size = len(data)
        self.text.insert(END, data)
        self.after(100, self.poll)

    def poll(self):
        if os.path.getsize(self.filename) > self.size:
            data = self.file.read()
            self.size = self.size + len(data)
            self.text.insert(END, data)
            self.text.see(END)
        self.after(100,self.poll)

if __name__ == "__main__":
    # Usage: LogViewer <logfile>
    root = Tk()
    viewer = LogViewer(root, sys.argv[1])
    viewer.mainloop()


- --
Chema Cortes (py en ch3m4.org)
  http://py.ch3m4.org
    PGPKEY: mailto:pgpkey en ch3m4.org?subject=__PGPKEY__
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.7 (GNU/Linux)

iD8DBQE+tZoTHLTQrABk8H0RAj8EAJ48gEpAxscR1+7NZkkQvVil5Is4dgCeMQKX
nPf6FerwJLrobgtBuyps4qk=
=1bgd
-----END PGP SIGNATURE-----

_______________________________________________
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