
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()调用的代码)启用解码。在这种模式下,默认情况下管道是行缓冲的。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)