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

标签 python subprocess handbrake

几个小时以来,我一直在为这个问题挠头。

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

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)

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

最佳答案

subprocess.Popen 期望命令被分成可转义的 block :

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

你的命令应该是一个参数列表:

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

关于Python:参数没有正确传递给命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19623023/

相关文章:

python - 为什么诗歌在运行 'add' 后删除一些条目?

python - 如何制作一个显示简单加载屏幕的程序?请参阅下面的更多细节

python - 如何使用 3 个列表在 Python 中创建嵌套字典

python - 在 Python 中实现类似 shell 的管道性能

Python pythonw 子进程 check_output 不起作用

python - 将 subprocess.Popen 输出附加到文件?

ffmpeg - handbrakecli/ffmpeg 命令编码和自动文件名(Ubuntu)

python - 如何只更新 Django 模型表单中的某些字段?

batch-file - 使用 HandBrake 命令行将所有 avi 转换为 mp4 并在转换后删除的批处理脚本

bash - HandBrakeCLI bash 脚本转换文件夹中的所有视频