2016-05-13 6 views
0

habe ich einen Python-Skript, das eine Datei mit folgendem Befehl Reißverschluss hat:Python subprocesscall eine zip.exe

subprocess.call(["zip", "-P", password, "-r", zipName, fileName]) 

Was die Argumente, die Datei in der gleichen Art und Weise (subprocess.call) zu entpacken, Angenommen, ich kenne das Passwort?

Antwort

1

-x für wenn nur einige Dateien entpacken.

subprocess.call(["unzip","-P",password,zipName,"-x",fileName]) 

Als Nebenbei bemerkt, von dem unzip Handbuch:

-P password 

Verwendung Passwort verschlüsseln zipfile Einträge (falls vorhanden) zu entschlüsseln. DAS IST UNSICHER! Viele Multi-User-Betriebssysteme bieten Möglichkeiten für jeden Benutzer, die aktuelle Befehlszeile eines anderen Benutzers zu sehen; selbst auf Stand-Alone-Systemen besteht immer die Gefahr von über die Schulter spähen. Das Speichern des Klartextpassworts als Teil einer Befehlszeile in einem automatisierten Skript ist noch schlimmer. Verwenden Sie nach Möglichkeit die interaktive Eingabeaufforderung ohne Echo, um Kennwörter einzugeben. (Und wo Sicherheit wirklich wichtig ist, verwendet starke Verschlüsselung wie Pretty Good Privacy anstelle der relativ schwache Verschlüsselung durch Standard zipfile bereitgestellt VER- Binder.)

+0

Danke, mein Herr! Genau das habe ich gesucht. –

1

Was Sie fragt, ist die Umsetzung spezifisch (zip .exe könnte alles Mögliche sein, also gebe ich Ihnen keine Antwort, die Sie vielleicht erwartet haben.

Stattdessen werde ich Ihnen sagen, wie es in pythonischer Weise zu tun.

Verwendung zipfile Modul

Archiv zu machen, tun:

with zipfile.ZipFile(zipname, 'w') as z: 
    z.setpassword(b'asdf') 
    z.write(filename) 

dementsprechend zu extrahieren:

with zipfile.ZipFile(zipname) as z: 
    z.setpassword(b'asdf') 
    z.extractall() 

wo asdf ist Ihr Passwort ein. Hinweis Sie benötigen Bytes, nicht str - vorausgesetzt, Sie verwenden Python 3. Wenn Sie Python 2 verwenden, schreiben Sie nicht die führende b.

+0

Das 'zipfile' Modul erstellt keine verschlüsselten Archive. '.setpassword()' dient nur zum Extrahieren von Dateien. – jfs