2016-08-09 35 views
0

Ich versuche, den folgenden Befehl mit Popen auszuführen.Tar --exclude funktioniert nicht wenn popen (shell = False)

args = ['/bin/tar', "--exclude='{}'".format('Build.tar.gz'), '-capvf', targetFile, '.' ] 
popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True) 

jedoch der Ausschluss Teil nur, wenn ich shell = True IE den obigen Befehl die Datei ‚Build.tar.gz‘ schließt nicht ausgeführt gesetzt funktioniert. Warum ist das? Gibt es eine Möglichkeit, dies zu erreichen, ohne die Shell = True zu setzen?

Grüße

Antwort

1

die Apostrophe aus "--exclude='{}'".format(...) entfernen, "--exclude={}".format(...)

verwenden, wenn Sie nicht über shell=True verwenden brauchen nicht entkommen zu verwenden. Die Anführungszeichen sind nur für die Shell sinnvoll, sie werden entfernt, bevor der Befehl ausgeführt wird, um die Liste der Argumente zu erstellen. Wenn Sie Anführungszeichen in einer Argumentliste für Popen verwenden, werden sie als literale Qoute-Zeichen übergeben. In Ihrem Fall würden Sie also 'Build.tar.gz' einschließlich Anführungszeichen ausschließen.

+0

Das hat funktioniert, danke – Ephreal