Acceder a la salida impresa de una llamada de función.

Parte de mi script llama a una función de (llamémoslo foo ) a otro módulo (escrito por otra persona hace mucho tiempo, y no quiero empezar a modificarlo ahora).
foo escribe cosas interesantes a la stdout (pero no devuelve None ), en parte, al llamar también a otras funciones. Quiero acceder a estas cosas interesantes que foo escribe a la stdout .

Por lo que sé, el subprocess está destinado a llamar a los comandos que normalmente llamaría desde la línea de comandos. ¿Hay un equivalente para las funciones de Python que yo llamaría desde mi script?

Estoy en python2.7, si importa

Como comentó @JimDeville, puedes intercambiar la salida estándar:

 #!python2.7 import io import sys f=io.BytesIO() def foo(): print 'hello, world!' save,sys.stdout = sys.stdout,f foo() sys.stdout = save f.seek(0) print f.read() 

Salida:

 hello, world!