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