à partir d'un script Python 3, je vais zipper un dossier. P>
La commande que je voudrais normalement utiliser dans le terminal et (- PI Utilisez pour le cryptage de mot de passe et le Ceci crée avec succès un Certainfolder.zip fort> avec le contenu protégé par mot de passe correct à l'intérieur. P>
Quand j'exécute cette commande de mon script, j'utilise p>
Cela me donne une erreur de glissière (le même genre que je voudrais obtenir si j'ai écrit la commande directement dans le terminal, mais si j'ai orthographié le nom du dossier, par exemple L'avertissement dit: P>
Zip AVERTISSEMENT: Nom non correspondant: Certainfolder / * p>
blockQuote>
De ma compréhension, il interprément en quelque sorte le / et la * dans le nom du nom du dossier, et pas comme moi essayant de naviguer dans le dossier ... P>
Des idées? P>
faire plus de choses déroutantes: p>
si le peu defolder existe déjà, alors p>
sera exécuté. Il dit qu'il met à jour le contenu du dossier, mais rien ne change vraiment aussi loin que je peux dire à l'archive elle-même. Toutefois, si je modifie le zip -p p4ssw0rd
/ * code> à la fin car je souhaite connecter le contenu du dossier, si je n'inclut pas cela, l'archive contient uniquement un dossier vide ) p>
subprocess.Call (['ZIP', '-P', 'P4SSW0RD', 'Certainfolder.zip', "Certainfeufs / *"]) Code> P>
ZIP -P P4SSW0RD Certainfolder.ZIP / code>) p>
subprocess.Call (['ZIP', '-P', 'P4SSW0RD', 'Certainfolder.zip', "Certainfeufs / *"]) Code> P>
'Certainfolder / *' code> à quelque chose d'autre comme
'Quelqueotherfolder / *' code> alors il jette à nouveau un nom non correspondant à une erreur. P>
4 Réponses :
C'est probablement parce que votre script est exécuté d'un emplacement différent. Essayez de passer le chemin absolu au lieu d'un chemin relatif. E.G.
subprocess.call(['zip', '-P', 'P4ssw0rd', '-j', 'somefolder.zip', '/full/path/to/somefolder/*'])
Il dit toujours que le nom ne correspondait pas, apparemment maintenant, il interprément le tout comme nom de dossier.
Si cela ne vous dérange pas d'utiliser quelque chose d'autre que le module de sous-processus, cela fonctionne:
os.popen("zip -P P4ssw0rd somefolder.zip somefolder/*")
Cela n'a pas vraiment fonctionné. Il crée cependant des fichiers étranges, avec des noms étranges et apparemment vides.
@celae Que signifie exactement "bizarre"?
@ P.DMitry Quelque fichier qui a un nom de non-sens aléatoire. Aucune extension. Semble être vide
@celae bizarre. Pouvez-vous essayer d'utiliser os.system code> au lieu de
os.popen code> et dites-moi s'il a le même comportement?
Vous devriez probablement convertir manuellement glob * code> à la liste des fichiers
Après une inspection supplémentaire, j'ai trouvé que Par exemple, dans ma question originale, le moyen correct (et de travail) d'utiliser En réalité, ma ligne ressemble plus à: p>
où Documentation: P>
HTTPS: / /docs.python.org/3.7/Library/subprocess.html#ReplaCing-older-ponces-with-Le-subprocess-module P>
blockQuote>
ou plus spécifiquement: p>
https://docs.python.org/3.7 /Library/subprocess.html#replacing-OS-System P>
blockQuote> OS.System () code> proposé par @Imrand, bien que cela fonctionne, il est recommandé d'être remplacé par le module code> SUPBROCESS CODE>. Donc, bien la manière la plus correcte serait d'utiliser
sous-processus.Call () code>, mais les arguments doivent être fournis de manière différente. P>
sous-processus.call () code> serait comme suit: p>
sous-processus.Call ('ZIP -P P4SSW0RD Certainfolder.zip Certainfolder / *', shell = true) code> p>
subprocess.Call ('ZIP -P P4SSW0SRD' + archivename + '' + foldertoarchive, shell = true) code> p> p>
archivename code> et
foldertoarchive code> est (je pense de manière assez explicative auto-explicative) que j'ai modifiée plus tôt. p>