【问题标题】:Redirect stdtout in Python 2.x在 Python 2.x 中重定向标准输出
【发布时间】:2017-07-06 15:33:19
【问题描述】:

我需要重定向来自stdout 的多个输出 例如:

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

【问题讨论】:

    标签: python string redirect stdout


    【解决方案1】:

    我通常将 StringIO 用于类似的用途,并且作为一个类似文件的对象,它具有 truncate 方法,也许 BytesIO 也有它。试试fake_stout.truncate(0)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-11
      • 2014-01-20
      • 2011-12-08
      • 1970-01-01
      相关资源
      最近更新 更多