4

mediainfo を使用してビデオ ファイルの長さを読み取ろうとしています。このシェルコマンドは機能します

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、これはそれらを解析できず、オプションを無視します。

この種の問題は、多くの場合、さまざまな特殊文字を必要とする/飲み込むシェル コマンドによって引き起こされます。などの引用符は、シェル マジックにより"削除されることがよくあります。bash対照的に、Python は魔法のためにそれらを必要としないため、使用した方法でそれらを複製します。それらが必要ないのに、なぜそれらを使用するのですか?(ええと、bash はそれらが必要だと思わせるからです)。

たとえば、bashでできること

$ dd of="foobar"

という名前のファイルに書き込みfoobar、引用符を飲み込みます。

pythonで、もしそうなら

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

という名前のファイルに書き込み、引用符"barfoo"保持します。

于 2016-07-06T12:20:25.133 に答える