python:subprocess.check_output 如何创建调用?
python: How does subprocess.check_output create it's calls?
我正在尝试使用 mediainfo 读取视频文件的持续时间。这个 shell 命令有效
mediainfo --Inform="Video;%Duration/String3%" file
并产生类似
的输出
00:00:33.600
但是当我尝试在 python 中使用此行 运行 它时
subprocess.check_output(['mediainfo', '--Inform="Video;%Duration/String3%"', file])
整个 --Inform 东西都被忽略了,我得到了完整的 mediainfo 输出。
有没有办法查看子进程构造的命令,看看有什么问题?
或者谁能告诉我哪里出了问题?
尝试:
subprocess.check_output(['mediainfo', '--Inform=Video;%Duration/String3%', file])
您的 python 字符串中的 "
可能会传递给 mediainfo
,后者无法解析它们并将忽略该选项。
此类问题通常是由shell 命令requiring/swallowing 各种特殊字符引起的。由于 shell 魔法,"
等引号经常被 bash
删除。相反,python 不需要它们来施展魔法,因此会按照您使用它们的方式复制它们。如果不需要它们,为什么要使用它们? (好吧,呃,因为 bash 让你相信你需要它们)。
例如,在bash我可以做到
$ dd of="foobar"
它会写入一个名为 foobar
的文件,并吞下引号。
在python,如果我这样做
subprocess.check_output(["dd", 'of="barfoo"', 'if=foobar'])
它将写入名为 "barfoo"
的文件,保留 引号。
我正在尝试使用 mediainfo 读取视频文件的持续时间。这个 shell 命令有效
mediainfo --Inform="Video;%Duration/String3%" file
并产生类似
的输出00:00:33.600
但是当我尝试在 python 中使用此行 运行 它时
subprocess.check_output(['mediainfo', '--Inform="Video;%Duration/String3%"', file])
整个 --Inform 东西都被忽略了,我得到了完整的 mediainfo 输出。
有没有办法查看子进程构造的命令,看看有什么问题?
或者谁能告诉我哪里出了问题?
尝试:
subprocess.check_output(['mediainfo', '--Inform=Video;%Duration/String3%', file])
您的 python 字符串中的 "
可能会传递给 mediainfo
,后者无法解析它们并将忽略该选项。
此类问题通常是由shell 命令requiring/swallowing 各种特殊字符引起的。由于 shell 魔法,"
等引号经常被 bash
删除。相反,python 不需要它们来施展魔法,因此会按照您使用它们的方式复制它们。如果不需要它们,为什么要使用它们? (好吧,呃,因为 bash 让你相信你需要它们)。
例如,在bash我可以做到
$ dd of="foobar"
它会写入一个名为 foobar
的文件,并吞下引号。
在python,如果我这样做
subprocess.check_output(["dd", 'of="barfoo"', 'if=foobar'])
它将写入名为 "barfoo"
的文件,保留 引号。