子进程“ TypeError:需要一个类似字节的对象,而不是'str'”

子进程“ TypeError:需要一个类似字节的对象,而不是'str'”,第1张

子进程“ TypeError:需要一个类似字节的对象,而不是'str'”

subprocess``bytes
默认情况下返回stdout或stderr流的对象。这意味着您还需要
bytes
在针对这些对象的 *** 作中使用对象。
"Duration"in x
使用
str
对象。使用字节文字(注意
b
前缀):

return [x for x in result.stdout.readlines() if b"Duration" in x]

或先解码数据(如果您知道所使用的编码)(通常是区域设置默认值,但可以为子流程设置

LC_ALL
或更具体的区域设置环境变量):

return [x for x in result.stdout.read().depre(encoding).splitlines(True)        if "Duration" in x]

另一种方法是

subprocess.Popen()
通过将
encoding
参数设置为合适的编解码器来告诉将数据解码为Unipre字符串:

result = subprocess.Popen(    ["ffprobe", filename],    stdout=subprocess.PIPE, stderr = subprocess.STDOUT,    encoding='utf8')

如果进行设置

text=True
(Python
3.7及更高版本,在以前的版本中称为
universal_newlines
),则还可以使用系统默认编解码器(用于
open()
调用的代码)启用解码。在这种模式下,默认情况下管道是行缓冲的。



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5647011.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-16
下一篇2022-12-16

发表评论

登录后才能评论

评论列表(0条)

    保存