4

我正在尝试使用 mediainfo 读取视频文件的持续时间。这个shell命令有效

mediainfo --Inform="Video;%Duration/String3%" file

并产生类似的输出

00:00:33.600

但是当我尝试用这条线在 python 中运行它时

subprocess.check_output(['mediainfo', '--Inform="Video;%Duration/String3%"', file])

整个 --Inform 事情被忽略了,我得到了完整的 mediainfo 输出。

有没有办法查看子进程构造的命令,看看有什么问题?

或者任何人都可以告诉什么是错的?

4

1 回答 1

3

尝试:

subprocess.check_output(['mediainfo', '--Inform=Video;%Duration/String3%', file])

您的"python 字符串中的 可能会传递给mediainfo,它无法解析它们并将忽略该选项。

这类问题通常是由需要/吞咽各种特殊字符的 shell 命令引起的。由于 shell 魔法",经常会删除诸如此类的引号。bash相比之下,python 不需要它们来魔术,因此会以您使用它们的方式复制它们。如果您不需要它们,为什么要使用它们?(嗯,嗯,因为 bash 让你相信你需要它们)。

例如,在 bash 我可以做

$ dd of="foobar"

它会写入一个名为 的文件foobar,吞下引号。

在python中,如果我这样做

subprocess.check_output(["dd", 'of="barfoo"', 'if=foobar'])

它将写入一个名为 的文件"barfoo",并保留引号。

于 2016-07-06T12:20:25.133 回答