On 22/02/10 11:30, Eduardo Ferro wrote:
http://oss.alea-soluciones.com/trac/wiki/BoscliOss
http://oss.alea-soluciones.com/files/screencasts/demo-boscli-oss-asterisk.html
Es decir es una libreria para crear CLIs tipo CISCO o similar mediante
la creación de modulos con comandos.
Estos módulos (plugins) tienen comandos/funciones que generan salida
por la consola, pero que el CLI que es el que los ejecuta tiene que
controlar esta salida, para por ejemplo
¿Se cortó el mensaje?
Es raro que una librería que funciona como CLI no tenga más opción que escribir
por pantalla a base de prints; sería de esperar alguna opción para escribir a
streams y así poder redirigir su salida. O quizá no entiendo bien la situación.
Pero en fin, por si sirve de ayuda, si tu pregunta fuera: ¿cómo puedo capturar
la stdout de una función externa que no puedo tocar? podría servirte un wrapper
como éste:
#!/usr/bin/python
import sys
from StringIO import StringIO
def fun(maxval):
for x in range(maxval):
print "numero %d" % x
return 2*maxval
def capture_stdout(function, *args, **kwargs):
old_stdout = sys.stdout
fake_stdout = StringIO()
sys.stdout = fake_stdout
ret = fun(*args, **kwargs)
sys.stdout = old_stdout
output = fake_stdout.getvalue()
return ret, output
ret, output = capture_stdout(fun, 3)
print "function returned %s and stdout: %s" % (ret, output)
$ python example.py
function returned 6 and output: numero 0
numero 1
numero 2
Aunque esto captura llamadas individuales a la función, si necesitas algo más
orientado a "stream" no te será muy útil (quizá entonces iría bien algo tipo
corutinas, pero ésa sería otra película)
-- http://www.arnau-sanchez.com
_______________________________________________
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/