2013-10-27 39 views
3

我一直在用這個小時刻撓我的腦袋。Python:無法正確傳遞給命令的參數

我想寫一個簡單的腳本將.AVI格式的舊視頻轉換爲.mp4與HandbrakeCLI,我無法獲得手剎註冊正確的參數,我不斷收到「缺少輸出文件名。 :/ 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) 

,心跳的功能是:

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) 

感謝您可以提供任何幫助......

回答

6

subprocess.Popen預計該命令是拆分成易變的塊:

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

你的命令應該是一個參數列表:

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

你先生,是一個天才。謝謝!! – hammus