2017-02-17 58 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)