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
28
demandé sur Peter Mortensen 2010-09-23 03:09:57

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).

9
répondu Jerry Coffin 2010-09-22 23:24:18

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.

33
répondu Matthew 2013-01-31 02:08:11

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

5
répondu Sys 2012-11-01 01:53:25

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" ...
3
répondu Bobb Dizzles 2012-12-03 19:24:41

le | FIND est une bonne alternative pour montrer ce qui s'est passé sans afficher un texte insignifiant.

2
répondu bruno777 2012-12-03 19:22:52

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.

0
répondu Дмитрий Бокач 2018-04-17 20:25:04

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.

0
répondu Doug J. Huras 2018-09-19 08:06:58

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 .

0
répondu Fr0sT 2018-09-19 08:13:25

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
0
répondu Sandburg 2018-09-19 08:25:25