我试图使用mediainfo读取视频文件的持续时间。这个shell命令工作
$(document).ready(function() {
var GlobalNews = [];
var CommentArray = [];
var NewsArray = [];
var CommentArr = {};
CommentArr['Comment'] = 'aaa';
CommentArray.push(CommentArr);
var NewsArr = {};
NewsArr['NewsNo'] = 'bbb'
NewsArr['Desc'] = 'vvv';
NewsArray.push(NewsArr);
GlobalNews = $.merge( CommentArray, NewsArray );
console.log(GlobalNews)
});
并生成类似
的输出<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
但是当我尝试使用此行在python中运行它时
mediainfo --Inform="Video;%Duration/String3%" file
整个--Inform事件被忽略,我得到了完整的mediainfo输出。
有没有办法看到子流程构建的命令,看看有什么错?
或者任何人都可以告诉他们错了什么?
答案 0 :(得分:2)
尝试:
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"
的文件,保留引号。