2016-04-29 2 views
0

Python IDLE unter Verwendung zeigt einen Fehler, wenn ich Dateien zu extrahieren versuchen mit WinRAR (UnRAR.exe):subprocess.CalledProcessError In Python, wenn 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" 

Was ist das Problem mit dem Code:

+1

Ruft das Aufrufen von Unrar mit genau den gleichen Parametern auf, wenn Sie es über die Befehlszeile aufrufen? –

+0

Ich setze mein Geld auf NEIN. – 7stud

+0

Ja! es funktioniert in cmd sehr gut –

Antwort

1

Ich würde dies kommentieren, aber ich habe nicht genug Ruf, um dies zu tun.

Sie den Befehl ohne die Shell-Schnittstelle ausgeführt wird, das heißt,

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

ich auch die Komplexität der das Hinzufügen zusätzlicher Schrägstriche von Ihrem Befehl mithilfe von dreifachen Anführungszeichen entfernen haben. Dies ist fast präziser, da Sie genau wissen, welcher Befehl und welche Argumente ausgeführt werden.

auch auf Windows die Shell = benötigt wird, gilt nicht, wenn Sie ein Shell-Kommando, https://docs.python.org/3/library/subprocess.html#popen-constructor gebaut laufen:

Unter Windows mit Shell = True, die COMSPEC-Umgebungsvariable gibt die Shell-Standard. Die einzige Zeit, die Sie unter Windows angeben müssen, ist, wenn der Befehl, den Sie ausführen möchten, in die Shell integriert ist (z. B. dir oder kopieren). Sie benötigen keine Shell = True, um eine Batchdatei oder eine konsolenbasierte ausführbare Datei auszuführen.

+0

Der Code ist richtig, das ist das Problem mit den Benutzerrechten, da der Code versucht, die Dateien im \ system32 \ -Ordner zu extrahieren. Aber danke Ihnen allen, dass Sie Ihre wertvolle Zeit damit verbracht haben, diese Frage zu beantworten –