Extraction d'un fichier 7 - Zip "silencieusement" - option de ligne de commande
je veux extraire une archive 7-Zip en script Python. Il fonctionne bien sauf qu'il crache les détails de l'extraction (qui est énorme dans mon cas).
y a-t-il un moyen d'éviter cette information verbeuse lors de l'extraction? Je n'ai pas trouvé d'option de ligne de commande "silencieuse" pour 7z.exe
.
mon ordre est
7z.exe -o some_dir x some_archive.7z
10 réponses
une possibilité serait d'engendrer le processus de l'enfant avec popen
, ainsi, sa sortie reviendra au parent pour être traitée/affichée (si désiré) ou complètement ignorée (créer votre objet popen
avec stdout=PIPE
et stderr=PIPE
pour pouvoir récupérer la sortie de l'enfant).
j'ai juste trouvé ceci en cherchant la même chose, mais je l'ai résolu moi-même! En supposant que la commande est traitée avec Windows / DOS, une solution plus simple est de changer votre commande en:
7z.exe -o some_dir x some_archive.7z > nul
Qui est, de diriger la sortie vers un fichier nul plutôt qu'à l'écran.
ou vous pouvez pipe la sortie à la commande DOS "find" pour seulement la sortie des données spécifiques, c'est-à-dire,
7z.exe -o some_dir x some_archive.7z | FIND "ing archive"
sortie suivante.
Création de l'archive some_archive.7z
ou
mise à jour des archives some_archive.7z * *
ma solution finale fut de changer la commande en
... some_archive.7z | FIND /V "ing "
Note double espace après "ing". Il en est résulté le résultat suivant.
7-Zip 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18
Scanning
Updating some_archive.7z
Everything is Ok
cela supprime le traitement de fichier individuel, mais produit un résumé de l'opération globale, quel que soit le type d'opération.
comme ils ont dit, pour cacher la plupart des messages de remplissage d'écran que vous pourriez utiliser ... some_archive.7z / FIND / V "compresser" mais que "FIND" supprimerait également les messages d'erreur qui avaient ce mot. Tu ne serais pas prévenu. Ce "FIND" peut aussi devoir être modifié à cause d'une nouvelle version 7-zip.
7-zip a une sortie verbeuse forcée, pas de mode silence, mélange stderr et stdout(*), ne sauve pas les permissions Unix, etc. Ces comportements anti-standards mis ensemble " 7-zip" dans un mauvais endroit lorsque comparé à "tar+bzip2" ou "zip", par exemple.
( * ) " Upstream (Igor Pavlov) ne veut pas faire de sorties différentes pour les messages, même si on lui a demandé à plusieurs reprises de le faire: (" http://us.generation-nt.com/answer/bug-346463-p7zip-stdout-stderr-help-166693561.html - "Igor Pavlov ne veut pas changer ce comportement " http://sourceforge.net/tracker/?func=detail&aid=1075294&group_id=111810&atid=660493
7zip ne comporte pas de mode explicite "quiet" ou "silent" pour l'extraction en ligne de commande.
une possibilité serait de lancer le processus enfant avec popen, de sorte que sa sortie reviendra au parent pour être traitée/affichée (si désiré) ou complètement ignorée (créer votre objet popen avec stdout=PIPE et stderr=PIPE pour être en mesure de récupérer la sortie de l'enfant).
sinon essayez de faire ceci:
%COMSPEC% /c "%ProgramFiles%-Zipz.exe" ...
le | FIND
est une bonne alternative pour montrer ce qui s'est passé sans afficher un texte insignifiant.
vous pouvez empêcher 7-Zip d'Afficher des messages en utilisant le commutateur-Y. Ceci répondra oui à toutes les questions. Utilisez ceci seulement lorsque vous êtes confiant.
si vous utilisez 7-zip.exe de Powershell, et vous voulez seulement voir des erreurs, alors vous pouvez essayer quelque chose comme ceci:
7-zip.exe u <Target> <Source> | Select-String "Error" -Context 10
cela affichera uniquement la ligne de message" erreur " et les 10 lignes environnantes (ou n'importe quel nombre) pour capturer la sortie spécifique à l'erreur.
en examinant la source 7zip, j'ai trouvé un commutateur caché -ba
qui semble faire l'affaire. Malheureusement, il n'est pas fini. J'ai réussi à le faire fonctionner avec plusieurs modifications de sources, mais c'est juste un hack. Si quelqu'un est intéressé, la variable d'option s'appelle options.EnableHeaders
et des modifications sont nécessaires dans le fichier CPP/7zip/UI/Console/Main.cpp
.
Vous pouvez aussi utiliser l'auteur de 7Zip pour terminer la fonctionnalité dans tracker . Il y a plusieurs demandes à ce sujet et l'une d'entre elles est ici .
7-zip n'a pas une telle option. Plus les lignes imprimées à chaque fichier comprimé sont censés afficher au même endroit sans newline, effaçant la précédente, qui a un effet cool. Malheureusement, dans certains contextes (Jenkins...) il produisait plusieurs lignes qui inondaient la console.
NUL
(windows) est peut-être une solution.
7-zip.exe -o some_dir x some_archive.7z>NUL