【发布时间】:2020-02-29 22:28:44
【问题描述】:
我正在遍历一个目录并对每个文件运行ffprobe 以获得它的持续时间。但是,我得到的唯一输出是
b''
b''
下面是我正在使用的部分代码,
for y in filename:
p1 = subprocess.Popen (['ffprobe', '-i', y, '-show_entries', 'format=duration', '-sexagesimal', '-v', 'quiet', '-of', 'csv=%s' % ("p=0")], stdout=subprocess.PIPE).communicate()[0]
print (p1)
目前,我正在迭代的目录中有两个文件。
有什么办法可以打印出实际的持续时间吗?
谢谢。
【问题讨论】:
-
您是否在终端内测试过传递给
Popen的命令的输出? -
是的,它有效。下面是结果,
fprobe -i /Users/mbpuser1/Desktop/Remote2/av4_file1.ts -show_entries format=duration -sexagesimal -v quiet -of csv="p=0" 0:09:11.112389 -
您是否验证了
filename变量?它是否包含它应该包含的字符串?如果它们包含相对路径,请尝试使用绝对路径。如果filename没有问题,请尝试使用os.system或os.popen而不是subprocess.Popen。您可以直接将字符串传递给这些方法,无需拆分。如果它仍然不起作用,我很抱歉,但我没有想法:/ -
我必须承认我对编程很陌生,但我想没有输出被打印出来。我认为
b' '输出是因为我使用python3.7解释代码。如果我使用python2.7解释代码,那么我会得到空行作为输出。 -
你是对的,python 3 和 2 之间存在差异。你可以阅读更多 here 但它可能对你没有帮助。尝试在
for循环内打印y的值(你可以这样做:print(y))并检查其值是否正确。如果它们是正确的,请将p1 = subprocess.Popen(...行替换为:p1 = os.popen("ffprobe -i " + y + " -show_entries ...).read()(显然不要将文字...替换为cmd 的其余部分)并且不要忘记事先import os。这不起作用,我没有想法