【问题标题】:How to get the data written to TextIOWrapper?如何将数据写入 TextIOWrapper?
【发布时间】:2018-08-08 12:54:42
【问题描述】:

我首先将一些二进制数据写入TextIOWrapper 对象。

然后需要获得所有连接的写入结果(在下面的示例中它将是b"XXXYYY")。如何获取写入的结果?

import sys
from io import BytesIO, TextIOWrapper

file = TextIOWrapper(BytesIO(), sys.stdout.encoding)

file.buffer.write(b"XXX")
file.buffer.write(b"YYY")

print(file) # does not work

【问题讨论】:

  • file.buffer.getvalue() 似乎有效。但是文档说buffer 不是公共 API 的一部分
  • 但是为什么你需要TextIOWrapper而不是纯BytesIO呢?
  • @Sraw 我将 (monkey-patch) sys.stdout 替换为我的 TextIOWrapper 对象(用于测试目的)

标签: python python-3.x io buffer


【解决方案1】:

如果我理解正确的话,你想抓住stdout。其实很简单:

from contextlib import redirect_stdout
from io import StringIO


f = StringIO()
with redirect_stdout(f):
    print("Hello", end="")
s = f.getvalue()
print("s: ", s)

如您所见,您不需要TextIOWrapper

【讨论】:

  • 用你的方法sys.stdout.buffer.write("Hello") 不起作用,但我需要重定向即sys.stdout.buffer
猜你喜欢
  • 1970-01-01
  • 2021-03-05
  • 2016-01-10
  • 2013-10-15
  • 2017-02-19
  • 1970-01-01
  • 1970-01-01
  • 2022-11-13
  • 2012-08-31
相关资源
最近更新 更多