2014-05-13 37 views
1

我有一個簡單的Python(2.7)腳本,應執行幾個SVN命令:當我的朋友的機器上運行它失敗文件名,目錄名或卷標語法不正確

def getStatusOutput(cmd): 
    print cmd 
    p = subprocess.Popen([cmd],stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) 
    output, status = p.communicate() 
    return status, output 

svn_cmd = [ 
     ["svn co " + FIRMWARE_URL + "/branches/interfaces/ interfaces --depth empty", ""], 
     ["svn up interfaces/actual_ver.txt", " Getting current version of a branch "] 
     ] 
status, output = getStatusOutput(svn_cmd[0][0]) 

不幸錯誤:「文件名,目錄名稱或卷標語法不正確。」 當我在我的機器上運行它時,它工作正常。

如果我改變:

status, output = getStatusOutput(svn_cmd[0][0]) 

status, output = getStatusOutput(svn_cmd[0]) 

然後,它會成功執行陣列(命令)的第一個元素,但隨後將失敗上第二(註釋)。有誰知道什麼是錯的?

回答

0

我有一個類似的代碼執行罰款Linux,但在Windows

失敗,它的工作原理,如果我使用shlex.split()

import shlex 
CMD="your command" 
cmdList=shlex.split(CMD) 
proc = subprocess.Popen(cmdList,stdout=subprocess.PIPE, stderr=subprocess.PIPE,shell=True 
(out, err) = proc.communicate() 
print err 
2

溶液容易轉念一想。問題在這裏:

p = subprocess.Popen([cmd],stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) 

和確切的[cmd]應該沒有[]。否則元素將被視爲一個數組而不是字符串。

希望這會有助於某人。

相關問題