Ich bin derzeit auf Popen
, um die Komprimierung & Speicherung von Dokumenten zu automatisieren.Verwenden von subprocess.Popen (shell = True) mit Windows-Ordnern
Für das Kompressionsteil, dachte ich an der folgenden Python-Linie:
subprocess.Popen("WinRAR.exe a -r c:\\03. Notes\\AllTexts *.txt", shell=True)
Ich halte Fehlermeldungen mit, als der Befehl nicht in der Lage ist, mit einem Ordnernamen zu beschäftigen, die ein Leerzeichen enthält (03. Notes
). Diese Frage wurde schon mehrmals gestellt, und ich muss sagen, dass ich alle Sätze ausprobiert habe: rohe Zeichenkette, doppelte Anführungszeichen, dreifache Anführungszeichen, ... Keine von ihnen hat funktioniert.
Da ich die Ordnernamen nicht ändern kann, und ich habe keine Ideen mehr zu versuchen, könnte jemand beraten, wie könnte ich diese Befehlszeile erfolgreich übergeben?
Warum verwenden Sie 'sh ell = Wahr 'überhaupt? Könnten Sie 'list'-basierten Aufruf verwenden (mit dem' glob' Modul, um Ihren Glob zu erweitern), und Python die notwendigen Konvertierungen/Escapes automatisch ausführen lassen, ohne 'shell = True' zu verwenden? – ShadowRanger
Es gibt keinen Grund, die Shell für diesen Befehl zu verwenden. Verwenden Sie eine Argumentliste ohne die Shell, z. 'subprocess.check_call ([" WinRAR.exe "," a "," -r "," C: \ 03. Notes \ AllTexts "," * .txt "])'. – eryksun
Danke für diesen Hinweis. Der check_call ist sehr sinnvoll, da die Liste der Argumente viel länger ist als in meinem Beispiel. Ich weiß nicht, wie ich deinen Kommentar markieren soll, aber es hat mir sehr geholfen. Es stellte die Hoffnung in meinem Automatisierungsprojekt wieder her :-) – JCF