2017-02-17 3 views
0

мне нужно перенаправить несколько выходов из stdout Например:Перенаправление stdtout в Python 2.x

def main(dict): 
    result = [] 
    real_stdout = sys.stdout 
    fake_stdout = io.BytesIO() 
    sys.stdout = fake_stdout 
    print ("""long 
string""") 
    sys.stdout = real_stdout 
    output_string = fake_stdout.getvalue() 
    result["1"] = output_string[:-1] 

    #fake_stdout.flush() 
    real_stdout = sys.stdout 
    sys.stdout = fake_stdout 
    print ("""new long string""") 
    sys.stdout = real_stdout 
    output_string = fake_stdout.getvalue() 
    fake_stdout.close() 

    sys.stdout = real_stdout 

    fake_stdout.close() 
    result["2"] = output_string[:-1] 
    return result 

Я ожидаю, что выход будет

[{"1", 'long\n string'}, {"2", 'new long string'}] 

Но я получаю

[{"1", 'long\n string'}, {"2", 'long\n stringnew long string'}] 

Как очистить fake_stdout перед вторым перенаправлением?

Это хороший способ сделать перенаправление и io.BytesIO() можно использовать для сохранения любой длины строки, перенаправленной с stdout?

Я не могу использовать capture_output from IPython.utils.io import

ответ

0

Я обычно использую StringIO для подобного использования, и представляющий собой файл-подобный объект имеет метод truncate, может быть BytesIO есть это тоже. Попробуйте fake_stout.truncate(0)

Смежные вопросы