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/

Responder a