如何使用io.TextIOWrapper打包流?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (6)
  • 关注 (0)
  • 查看 (2534)

我如何打包一个开放的二进制流 - 一个Python 2文件,一个Python 3 io.BufferedReader,一个io.BytesIO - 在io.TextIOWrapper

我试图编写的代码将保持不变:

  • 运行在Python 2上。
  • 运行在Python 3上。
  • 使用从标准库生成的二进制流(即我无法控制它们的类型)
  • 使用二进制流进行双测试(即没有文件句柄,不能重新打开)。
  • 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]
>>> type(gnupg_subprocess.stdout)
<type 'file'>
>>> gnupg_stdout = io.TextIOWrapper(gnupg_subprocess.stdout, encoding="utf-8")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'file' object has no attribute 'readable'
提问于
用户回答回答于

原来你只需要把你的io.BytesIOio.BufferedReader包装它同时存在于Python 2和Python 3上。

import io

reader = io.BufferedReader(io.BytesIO("Lorem ipsum".encode("utf-8")))
wrapper = io.TextIOWrapper(reader)
wrapper.read()  # returns Lorem ipsum

热门问答

使用微信小程序也可以做腾讯云的标准视频直播吗?使用微信小程序做腾讯云的视频直播和im即时通讯可行吗?

美女视频一起走向共同富裕
推荐
支持的 IM部分,集成云通信 https://cloud.tencent.com/document/product/269/36838 标准直播部分,使用live-pusher和live-player标签,然后用云直播即可 https://cloud.tencent.com/do...... 展开详请

为什么我通过控制台vnc看到的界面和用vnc viewer看的的界面不一样???

HappyLau谈云计算专注于公有云,私有云解决方案,在kubernetes,openstack,kvm,ceph,linux,shell有丰富的实战经验。
推荐

控制台页面使用的是novnc,novnc是一种基于web页面使用的vnc客户端,详情可参考https://github.com/novnc/noVNC介绍,常规的vnc viewer是图形的客户端,所使用的依赖库有所不同,因此显示也不一样。

iOS在release下不走sendProcessBlock进度回调?

karis

腾讯 · 客户端开发工程师 (已认证)

Karis
推荐

请问是哪个版本的sdk呢,调用代码方便贴一下吗,最好能提供一个能复现的demo哈

API获取域名列表一直AuthFailure,code:4100?

推荐
推荐使用SDK进行调用:https://github.com/QcloudApi/qcloudapi-sdk-python 如果要自己写,也请参考下签名文档中python的代码示例,或者SDK中的源码:https://github.com/QcloudApi/qcloudapi-...... 展开详请

请问有图片鉴黄和文字甄别功能吗?现文字违规监控那么严格,有什么好的检测吗?

推荐已采纳
有的。 腾讯云 CDN 结合腾讯优图的深度学习图像识别技术,推出“图片鉴黄”服务,针对 CDN 全网分发的图片进行智能扫描,有效规避您的业务涉黄风险,目前全网免费公测中。参考文档:https://cloud.tencent.com/document/product/228/117...... 展开详请

使用文档遇到问题,可以找谁处理?

推荐已采纳
请叫我雷锋!腾讯云文档有“文档反馈”的功能,直接在文档页面就可以反馈,反馈还有 礼品 ~ 云+社区:问答.png ... 展开详请

所属标签

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励