Extraction d'un fichier 7-Zip « en silence » - option de ligne de commande

StackOverflow https://stackoverflow.com/questions/3774278

  •  04-10-2019
  •  | 
  •  

Question

Je veux extraire un 7-Zip archive dans un script Python. Il fonctionne très bien, sauf qu'il recrache les détails d'extraction (ce qui est énorme dans mon cas).

Y at-il un moyen d'éviter ces informations verbeux lors de l'extraction? Je ne trouve pas une option de ligne de commande « silencieuse » à 7z.exe.

Ma commande est

7z.exe -o some_dir x some_archive.7z
Était-ce utile?

La solution

Une possibilité serait de reproduire le processus enfant popen , de sorte que sa sortie sera revenir au parent à traiter / affiché (si désiré) ou bien complètement ignoré (créer votre objet popen avec stdout=PIPE et stderr=PIPE pour être en mesure de récupérer la sortie de l'enfant).

Autres conseils

Je viens suis tombé sur ce lors de la recherche de 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:

7z.exe -o some_dir x some_archive.7z > nul

C'est, diriger la sortie vers un fichier null plutôt que l'écran.

Ou vous pouvez redirigez la sortie à la commande DOS « trouver » uniquement les données spécifiques de sortie, qui est,

7z.exe -o some_dir x some_archive.7z | FIND "ing archive"

Ce serait tout simplement conduire à la sortie suivante.

  

Création d'archives some_archive.7z

ou

  

Mise à jour de l'archive some_archive.7z **


Ma solution finale était de changer la commande

... some_archive.7z | FIND /V "ing  "

Remarque espace double après 'ing'. Cela a donné lieu à la sortie suivante.

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 des fichiers individuels, 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 écran, vous pouvez utiliser ... some_archive.7z | FIND / V « Compresser » mais que « FIND » serait également supprimer les messages d'erreur qui avaient ce mot. Vous ne seriez pas prévenu. Ce « FIND » peut aussi être changé en raison d'une nouvelle version 7-Zip.

7-zip a une force verbeux sortie, aucun mode de silence, les mélanges stderr et stdout (*), ne enregistre pas les permissions Unix, etc. Ces comportements anti-normes ainsi que mettre "7-zip" dans un mauvais endroit où être comparé à « goudron + bzip2 » ou « fermeture éclair », par exemple.

(*) "en amont (Igor Pavlov) ne veut pas faire des sorties différentes pour les messages, même si il a été demandé à plusieurs reprises de le faire :(" http://us.generation-nt.com/answer/bug-346463-p7zip-stdout-stderr- aide-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 dispose pas d'un explicite « calme » ou en mode « silencieux » pour l'extraction de ligne de commande.

Une possibilité serait de reproduire le processus de l'enfant avec popen, de sorte que sa sortie reviendra au parent à traiter / affiché (si désiré) ou bien complètement ignoré (créez votre objet popen avec stdout = PIPE et stderr = PIPE pour être en mesure de récupérer la sortie de l'enfant).

Dans le cas contraire Essayez de faire ceci:

%COMSPEC% /c "%ProgramFiles%\7-Zip\7z.exe" ...

L'expansion sur la réponse de @Matthew et cette réponse https: / /superuser.com/questions/194659/how-to-disable-the-output-of-7-zip  J'utilise FINDSTR au lieu de trouver pour que je puisse connecter plusieurs lignes à exclure et des lignes vides ainsi:

7za.exe a test1.zip .\foldertozip | FINDSTR /V /R /C:"^Compressing  " /C:"Igor Pavlov" /C:"^Scanning$" /C:"^$" /C:"^Everything is Ok$"
  • / V: exclure
  • / R: regex
  • / C: "^ Compression": début de ligne, en comprimant, 2 places
  • / C: "^ Numérisation $": le mot Numérisation seul sur une ligne (begining / fin)
  • / C: "^ $": un début et à la fin, sans rien entre les deux, à savoir, une ligne vide

J'utilise / C de sorte qu'un espace est un espace, sinon il est un séparateur entre plusieurs mots comme dans à exclure Effectuer cette version plus simple:

FINDSTR /V "Compressing Pavlov Scanning Everytyhing"

(les mêmes mises en garde existent, si les changements de formulation dans une nouvelle version, ou si un démarrage en ligne utile avec le mot « Compresser », il ne fonctionnera pas comme prévu).

Le | FIND est une bonne alternative pour montrer ce qui est arrivé sans afficher le texte insignifiant.

Si vous utilisez 7 zip.exe de Powershell, et que vous voulez voir des erreurs, vous pouvez essayer quelque chose comme ceci:

7-zip.exe u <Target> <Source> | Select-String "Error" -Context 10

Cela n'affichera la ligne de message « erreur » et les 10 lignes environnantes (ou quel que soit le nombre) pour capturer la sortie spécifique d'erreur.

L'examen des sources 7zip J'ai trouvé commutateur -ba caché qui semble faire l'affaire. Malheureusement, il est pas fini. J'ai réussi à le faire fonctionner avec plusieurs modifications de sources, mais il est juste un hack. Si quelqu'un est intéressé, la variable d'option est appelée options.EnableHeaders et des changements sont nécessaires dans le fichier CPP/7zip/UI/Console/Main.cpp. Sinon, vous pouvez pousser l'auteur de 7Zip pour terminer la fonction Tracker . Il y a plusieurs demandes à ce sujet et l'un d'entre eux est .

7-zip n'a pas une telle option. De plus, les lignes imprimées à chaque fichier compressé sont censés afficher au même endroit, sans saut de ligne, effaçant le précédent, ce qui a un effet cool. Malheureusement, dans certains contextes (Jenkins ...), il a produit plusieurs lignes ?? inondant la console.

NUL (fenêtres) est peut-être une solution.

7-zip.exe -o some_dir x some_archive.7z>NUL

Vous pouvez arrêter 7-Zip d'affichage des invites à l'aide du commutateur -y. Cela répondre oui à toutes les invites. Utilisez ce que lorsque vous êtes confiant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top