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

ham*_*mus 3 python subprocess handbrake

几个小时我一直在摸着这个.

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

这是我到目前为止所拥有的

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)
Run Code Online (Sandbox Code Playgroud)

而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)
Run Code Online (Sandbox Code Playgroud)

谢谢你尽你所能的帮助...

Ble*_*der 6

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

['foo', '-a', 'bar', '--baz']
Run Code Online (Sandbox Code Playgroud)

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

cmd = [
    'C:\\Program Files\\Handbrake\\HandbrakeCLI.exe',
    '-i', filepath,
    '-o', outputPath
]
Run Code Online (Sandbox Code Playgroud)