2016-04-29 50 views
0

Python的空閒時,顯示當我試圖使用WinRAR解壓縮(UnRAR.exe)文件的錯誤:subprocess.CalledProcessError使用Python中的unrar

"Traceback (most recent call last): 
    File "<pyshell#32>", line 1, in <module> 
    response=subprocess.check_output(['"C:\\Users\\B74Z3\\Desktop\\Test\\UnRAR.exe" e -p123 "C:\\Users\\B74Z3\\Desktop\\Test\\Test.rar"'], shell=True) 
    File "C:\Program Files\Python 3.5\lib\subprocess.py", line 629, in check_output 
    **kwargs).stdout 
    File "C:\Program Files\Python 3.5\lib\subprocess.py", line 711, in run 
    output=stdout, stderr=stderr) 
subprocess.CalledProcessError: Command '['"C:\\Users\\B74Z3\\Desktop\\Test\\UnRAR.exe" e -p123 "C:\\Users\\B74Z3\\Desktop\\Test\\Test.rar"']' returned non-zero exit status 1" 

什麼是與代碼的問題:

import subprocess 
response=subprocess.check_output(['"C:\\Users\\B74Z3\\Desktop\\Test\\UnRAR.exe" e -p123 "C:\\Users\\B74Z3\\Desktop\\Test\\Test.rar"'], shell=True) 
+1

當您從命令行調用Unrar時,是否使用完全相同的參數調用Unrar? –

+0

我把我的錢放在NO。 – 7stud

+0

是的!它在cmd中工作得很好 –

回答

1

我會對此發表評論,但我沒有足夠的聲望來這樣做。

嘗試沒有shell界面運行的命令,就是

response=subprocess.check_output(["""C:\Users\B74Z3\Desktop\Test\UnRAR.exe""", "e", "-p123', """C:\Users\B74Z3\Desktop\Test\Test.rar"""]) 

我也刪除通過使用三引號從您的命令添加額外的反斜線的複雜性。這幾乎更精確,因爲您確切知道正在運行的命令和參數。

也可以在Windows = True時,不需要外殼,除非你正在運行內置的命令外殼,https://docs.python.org/3/library/subprocess.html#popen-constructor

在Windows與殼牌= TRUE,則COMSPEC環境變量指定默認的shell。唯一需要在Windows上指定shell = True的時間是當您希望執行的命令構建到shell中時(例如dir或copy)。您不需要shell = True來運行批處理文件或基於控制檯的可執行文件。

+0

代碼實際上是與用戶權限有關的問題,因爲代碼正試圖提取\ system32 \文件夾中的文件。 但是,感謝大家花費寶貴的時間回答這個問題 –

相關問題