2017-01-17 3 views
1

Ich benutze das Subprozess-Modul in Python 2.7. Mein Code sieht aus wiePython 2.7 Get Befehl stdout/stderr

cmd = 'unrar l -p%s %s' % (pwd, filename) 
proc = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) 
(output, err) = proc.communicate() 

Dieser Code funktioniert gut auf Windows 7/10, aber es funktioniert nicht auf Ubuntu 16.04. Ich debuggte und sah, dass die Variable err leer ist, was unter Windows die Fehlermeldung enthält. Und die Variablenausgabe enthält die Hilfemeldung des Befehls. Es sieht so aus, als ob der Befehl ohne Optionen ausgeführt wurde.

Wenn dies nicht der richtige Weg ist, einen Befehl auszuführen und seine stdout/stderr-Ausgabe zu erhalten, was ist der richtige Weg?

+0

es wird fehlschlagen, wenn 'pwd' oder' filename' Leerzeichen enthalten. Betrachte 'shlex.split()' oder nur 'cmd = [" unrar "," l "," - p ", pwd, Dateiname]' und lege 'shell = True' ab –

Antwort

0

Dank dem Tipp von Jean-François Fabre habe ich den shell=True Parameter fallen gelassen und das Programm funktioniert gut. Ich denke, ich werde die Dokumentation unter subprocess.Popen() lesen müssen, um herauszufinden, warum ich unter Windows shell=True brauche, während ich auf Ubuntu nicht bin, aber jetzt bin ich glücklich.