Python:参数没有正确传递给命令

时间:2013-10-27 20:18:03

标签: python subprocess handbrake

我一直在用这个问题抓了几个小时。

我正在尝试编写一个简单的脚本,使用HandbrakeCLI将.AVI格式的旧视频转换为.mp4,我无法让Handbrake注册正确的参数,我不断收到“缺少输出文件名。运行C: / Program Files / Handbrake / HandbrakeCLI.exe - help for syntax。\ r \ n“error。

到目前为止我所拥有的是什么

import glob
import os

import handbrake

hb = handbrake.HandbrakeEncode
mydir = "C:\\Path\\To\\MyVids\\"
os.chdir(mydir)

filesList = []

for files in glob.glob("*.avi"):
    filesList.append(mydir + files)
    print(mydir + files) 
    #this prints the correctly assembled path and file as expected

for files in filesList:
    print("Encoding file: " + files)
    hb(files)

和hb函数是:

def HandbrakeEncode(filepath):
    import subprocess
    import os
    from subprocess import Popen, PIPE
    outputPath, fileExtension = os.path.splitext(filepath)
    outputPath += ".mp4"

    args = '-i ' + filepath + ' -o '+ outputPath


    cmd = ['C:\\Program Files\\Handbrake\\HandbrakeCLI.exe', args]


    p = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    stdout, stderr = p.communicate()
    print(stdout)

感谢您提供任何帮助......

1 个答案:

答案 0 :(得分:6)

subprocess.Popen期望命令被拆分为可逃避的块:

['foo', '-a', 'bar', '--baz']

您的命令应该是参数列表:

cmd = [
    'C:\\Program Files\\Handbrake\\HandbrakeCLI.exe',
    '-i', filepath,
    '-o', outputPath
]