Python脚本遍历Windows目录并通过子进程启动应用程序

时间:2013-01-26 04:00:34

标签: python subprocess stdout

我是python的新手,显然是stackoverflow的新手。我的目标是创建一个文件,其中包含有关我库中视频文件的信息:编解码器,大小,比特率​​和分辨率,我可以轻松解析。我计划使用这些信息来确定哪些视频文件的质量足够低,以保证用更好看的代码替换。

我在sourceforge上找到了MediaInfo。我的脚本递归遍历给定目录并通过子进程调用MediaInfo。由于stackoverflow上的this线程描述了如何解决Windows权限错误,我解决了早期的错误。我还实现了来自this线程的代码来隐藏windows命令提示符控制台,该控制台在每次调用子进程时都被实例化。

目前,我的代码失败并出现以下错误: returned non-zero exit status 1

我的脚本的当前状态如下。提前谢谢!

import os, subprocess

我推测问题可能在于我如何格式化传递给子流程

的字符串
types = [".avi", ".mp4", ".mkv"]
app = "MediaInfo.exe"
app_path = os.path.join("C:\Program Files\MediaInfo\MediaInfo_CLI_0.7.61_Windows_x64", app)
movie_dir = "L:\Movies"
current_file = ""

以下代码启动没有控制台窗口的子进程

startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW

递归检查媒体目录并分析匹配文件

for root, dirs, files in os.walk(movie_dir):
    for filename in files:
        for extension in types:
            if (filename.endswith(extension)):
                current_file = '"' + os.path.join(root, filename) + '"'
                output = subprocess.check_output([app, current_file], 
                    executable=app_path, 
                    stderr=subprocess.STDOUT,
                    startupinfo=startupinfo)
                print app_path, current_file, output #debug
                with open("out.txt", "a") as f:
                    f.write(output)

1 个答案:

答案 0 :(得分:0)

如果你在python 3(和windows)及以上,尝试使用原始字符串(或在窗口上转义反斜杠),或在形成路径时使用正斜杠!而不是

app = "MediaInfo.exe"
app_path = os.path.join("C:\Program Files\MediaInfo\MediaInfo_CLI_0.7.61_Windows_x64", app)
movie_dir = "L:\Movies"

尝试使用

app = r'MediaInfo.exe'
app_path = os.path.join(r'C:\Program Files\MediaInfo\MediaInfo_CLI_0.7.61_Windows_x64',  app)
movie_dir = r'L:\Movies'

同样在你的剧本中也是如此。我在字符串'C:\ Program Files ..'中的空格也遇到了很多麻烦,并且没有转义反斜杠。

相关问题