python 将二进制(bytes)输出到stdout

今天遇到一个问题,想把python存储在内存里的一段音频直接通过pipe输出到ffmpeg进行转码。因为对pipe的获取了解的不多,所以决定输出到stdout再用交互shell的|符号交给ffmpeg。这就涉及到了stdout的二进制输出。

百度了好久,发现基本所有的文章都是基于python 2的,而且都是抄的同一篇文章…就不吐槽了,解决还得靠自己。

首先,print函数肯定不能用,因为print会自动调用__str__转换为字符串格式,而一转换肯定没法原始字节流输出…注意到print的参数里面有一个可选参数是file,默认值是sys.stdout(a file-like object (stream); defaults to the current sys.stdout.),那就试一下直接调用sys.stdoutwrite方法。

不料…

Python 3.10.4 | packaged by conda-forge | (main, Mar 24 2022, 17:32:50) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.stdout.write(b'test')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: write() argument must be str, not bytes

没办法,只能输出字符串…但接下来的探索受到了这篇文章的启发,于是尝试直接写入stdout的缓冲区:

>>> type(sys.stdout.buffer)
<class '_io.BufferedWriter'>
>>> sys.stdout.buffer.write(b'test')
test4
>>> sys.stdout.buffer.write(b'\xe6\xb5\x8b\xe8\xaf\x95')
测试6

成功!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值