python中io.textio_用io.TextIOWrapp包装打开的流

如何将一个开放的二进制流(Python 2file、Python 3io.BufferedReader、Pythonio.BytesIO)包装到一个io.TextIOWrapper中?

我正在尝试编写可以正常工作的代码:在Python2上运行。

在Python3上运行。

使用从标准库生成的二进制流(即,我无法控制它们是什么类型)

将二进制流设为测试双倍(即没有文件句柄,无法重新打开)。

生成包装指定流的io.TextIOWrapper。

需要io.TextIOWrapper,因为标准库的其他部分需要它的API。存在其他类似文件的类型,但没有提供正确的API。

示例

包装显示为subprocess.Popen.stdout属性的二进制流:import subprocess

import io

gnupg_subprocess = subprocess.Popen(

["gpg", "--version"], stdout=subprocess.PIPE)

gnupg_stdout = io.TextIOWrapper(gnupg_subprocess.stdout, encoding="utf-8")

在单元测试中,流被替换为io.BytesIO实例,以控制其内容,而不接触任何子进程或文件系统。gnupg_subprocess.stdout = io.BytesIO("Lorem ipsum".encode("utf-8"))

它在Python 3的标准库创建的流上运行良好。但是,相同的代码在Python 2生成的流上失败:[Python 2]

>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值