предположим, что есть сценарий, делающий что-то вроде этого:
# module writer.py
import sys
def write():
sys.stdout.write("foobar")
Теперь предположим, что я хочу зафиксировать вывод write
функции и сохранить его в переменной для дальнейшей обработки. Наивное решение было:
# module mymodule.py
from writer import write
out = write()
print out.upper()
Но это не работает. Я придумал другое решение, и оно работает, но, пожалуйста, дайте мне знать, есть ли лучший способ решить проблему. Благодарность
import sys
from cStringIO import StringIO
# setup the environment
backup = sys.stdout
# ####
sys.stdout = StringIO() # capture output
write()
out = sys.stdout.getvalue() # release output
# ####
sys.stdout.close() # close the stream
sys.stdout = backup # restore original stdout
print out.upper() # post processing