几年前,我正在使用一个先前提出的问题的代码,但是,我认为这已经过时了。尝试运行代码,我收到上述错误。我仍然是Python的新手,因此无法从类似的问题中得到很多澄清。有人知道为什么会这样吗?
import subprocess
def getLength(filename):
result = subprocess.Popen(["ffprobe", filename],
stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
return [x for x in result.stdout.readlines() if "Duration" in x]
print(getLength('bell.mp4'))
追溯
Traceback (most recent call last):
File "B:\Program Files\ffmpeg\bin\test3.py", line 7, in <module>
print(getLength('bell.mp4'))
File "B:\Program Files\ffmpeg\bin\test3.py", line 6, in getLength
return [x for x in result.stdout.readlines() if "Duration" in x]
File "B:\Program Files\ffmpeg\bin\test3.py", line 6, in <listcomp>
return [x for x in result.stdout.readlines() if "Duration" in x]
TypeError: a bytes-like object is required, not '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().decode(encoding).splitlines(True)
if "Duration" in x]
另一种方法是subprocess.Popen()
通过将encoding
参数设置为合适的编解码器来告诉将数据解码为Unicode字符串:
result = subprocess.Popen(
["ffprobe", filename],
stdout=subprocess.PIPE, stderr = subprocess.STDOUT,
encoding='utf8'
)
如果进行设置text=True
(Python
3.7及更高版本,在以前的版本中称为universal_newlines
),则还可以使用系统默认编解码器(用于open()
调用的代码)启用解码。在这种模式下,默认情况下管道是行缓冲的。
以下是尝试使用套接字修改用户提供的输入的代码: 当我执行它并提供输入时,会发生以下错误: 我能做些什么来解决这个问题?
我正在运行一个代码,但这一行出现错误: TypeError:需要一个类似字节的对象,而不是str 这里显示的是类型列表的各个部分,是 TypeError:需要一个类似字节的对象,而不是str
我得到一个“TypeError:需要一个类似字节的对象,而不是'str'”。我在使用StringIO时遇到了一个错误“TypeError:initial_值必须是str或None,而不是bytes”,我在使用Python 3.7。 我也得到这个函数同样的错误。"返回pickle.load(打开(DATA_FILE))"
问题内容: 我最近已经迁移到Py 3.5。这段代码在Python 2.7中正常工作: 升级到3.5后,我得到了: 最后一行错误(模式搜索代码)。 我试过使用语句两侧的函数,也尝试过: -无济于事。 我能够很快解决几乎所有的问题,但是这个小小的声明困扰着我。 问题答案: 你以二进制模式打开文件: 这意味着从文件读取的所有数据都作为bytes对象而不是作为对象返回。然后,你不能在容纳测试中使用字符串:
我最近迁移到了Py3.5。这段代码在Python2.7中正常工作: 升级到3.5后,我得到了: 最后一行(模式搜索代码)出错。 我尝试在语句的两侧使用函数,也尝试了: -无济于事。 我能够很快解决几乎所有的2:3问题,但这个小小的声明困扰着我。
我最近迁移到Python 3.5。此代码在Python 2.7中正常工作: 升级到3.5后,我得到了: TypeError:需要类似字节的对象,而不是'str' 错误在最后一行(模式搜索代码)。 我试过使用函数,并尝试: -没用。 我能够解决几乎所有的Python