Захватить стандартный вывод из сценария?

предположим, что есть сценарий, выполняющий что-то вроде этого:

# 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
79
задан martineau 7 October 2019 в 20:54
поделиться