Frage

Ich möchte ein extrahieren 7-Zip in einem Python-Skript zu archivieren. Es funktioniert gut, außer dass es die Extraktion Details ausspuckt (was in meinem Fall sehr groß ist).

Gibt es eine Möglichkeit, diese ausführliche Informationen zu vermeiden, während das Extrahieren? Ich habe keine „stille“ Befehlszeilenoption zu 7z.exe finden.

Mein Befehl ist

7z.exe -o some_dir x some_archive.7z
War es hilfreich?

Lösung

Eine Möglichkeit wäre, das Kind Prozess zum Laichen mit popen , so dass ihr Ausgang wird kommen zu den Eltern zurück zu verarbeitenden / angezeigt (falls gewünscht) oder auch vollständig ignoriert (erstellen Sie Ihr popen Objekt mit stdout=PIPE und stderr=PIPE die Lage sein, die Ausgabe von dem Kind zu holen).

Andere Tipps

Ich kam gerade diese über, wenn für die gleiche Suche, aber ich gelöst es selbst! Vorausgesetzt, dass der Befehl mit Windows / DOS verarbeitet wird, ist eine einfachere Lösung, um Ihren Befehl zu ändern:

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

Das heißt, leitet die Ausgabe in eine Null-Datei nicht auf dem Bildschirm.

Oder Sie könnten Rohr die Ausgabe an das DOS „finden“ Befehl nur ausgegeben spezifischen Daten, das heißt,

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

Dies würde nur in der folgenden Ausgabe.

Erstellen von Archiv some_archive.7z

oder

Aktualisieren Archiv some_archive.7z **


Meine letzte Lösung war, den Befehl

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

Hinweis Doppel Raum nach 'ing'. Dies führte in der folgenden Ausgabe.

7-Zip 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18

Scanning

Updating some_archive.7z


Everything is Ok

Dies entfernt die einzelne Dateiverarbeitung, sondern erzeugt eine Zusammenfassung des Gesamtbetriebes, unabhängig von der Betriebsart.

Wie sie sagte, sich zu verstecken die meisten der bildschirmfüllende Nachrichten, die Sie nutzen könnten ... some_archive.7z | FIND / V „Komprimieren“, aber „FIND“ würde auch die Fehlermeldungen entfernen, die das Wort hatten. Sie würden nicht gewarnt werden. Das „FIND“ kann auch wegen einer neueren 7-zip-Version geändert werden müssen.

7-zip hat eine ausführliche Ausgabe einen gezwungen, kein Stille-Modus, mischt stderr und stdout (*), nicht speichern Unix-Rechte, usw. Diese anti-Standards Verhaltensweisen zusammen „7-zip“ in einem schlechten Platz, wenn wobei im Vergleich zu "tar + bzip2" oder "zip", zum Beispiel.

(*) "Upstream (Igor Pavlov) will nicht verschiedene Ausgänge für Meldungen machen, auch wenn er so mehrmals gebeten, zu tun ist schon :(" http://us.generation-nt.com/answer/bug-346463-p7zip-stdout-stderr- Hilfe-166693561.html - "Igor Pavlov dieses Verhalten nicht ändern wollen" http://sourceforge.net/tracker/?func=detail&aid=1075294&group_id=111810&atid=660493

7zip keine expliziten „leise“ oder „silent“ -Modus für die Kommandozeilen-Extraktion.

Eine Möglichkeit, den Kind-Prozess mit popen zum Laichen wäre, so seine Ausgabe an die Eltern kommen wieder verarbeitet werden / angezeigt (falls gewünscht) oder auch vollständig ignoriert (erstellen Sie Ihre popen Objekt mit stdout = PIPE und stderr = PIPE der Lage sein, die Ausgabe von dem Kind) abgerufen werden.

Ansonsten Versuchen Sie dies zu tun:

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

Die Erweiterung auf @Matthew ‚s Antwort und diese Antwort https: / /superuser.com/questions/194659/how-to-disable-the-output-of-7-zip Ich verwende FINDSTR statt finden, damit ich Kette mehr Zeilen kann ausschließen und Leerzeilen auch:

7za.exe a test1.zip .\foldertozip | FINDSTR /V /R /C:"^Compressing  " /C:"Igor Pavlov" /C:"^Scanning$" /C:"^$" /C:"^Everything is Ok$"
  • / V: ausschließen
  • / R: regex
  • / C: "Compressing ^": Anfang der Linie, Stauchen, 2 Räume
  • / C: "^ Scannen $": das Wort Scanning auf eigenem auf einer Linie (begining / Ende)
  • / C: "^ $": ein Anfang und Ende, ohne irgendetwas dazwischen, also eine leere Zeile

Ich verwende / C, so dass ein Raum einen Raum ist, sonst ist es ein Trennzeichen zwischen mehreren Worten zu exlude wie in dieser einfacheren Version:

FINDSTR /V "Compressing Pavlov Scanning Everytyhing"

(die gleichen Einschränkungen bestehen, wenn die Formulierung Änderungen in einer neuen Version, oder wenn eine nützliche Zeile beginnt mit dem Wort „Komprimieren“, es wird nicht funktionieren wie erwartet).

Die | FIND ist eine gute Alternative zu zeigen, was ohne Anzeige unbedeutend Text geschehen ist.

Wenn Sie mit 7-zip.exe von Powershell, und Sie wollen nur Fehler sehen, dann könnte man so etwas wie dies versucht:

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

Dies wird nur angezeigt, die „Fehler“ Meldezeile und die umliegenden 10 Zeilen (oder was auch immer Anzahl), um die Fehler spezifische Leistung zu erfassen.

Prüfungs 7zip Quelle fand ich versteckt -ba Schalter, der den Trick zu tun scheint. Leider ist es nicht fertig. Ich konnte es mit mehreren Modifikationen von Quellen machen arbeiten, aber es ist nur ein Hack. Wenn jemand interessiert ist, wird die Option Variable options.EnableHeaders und Änderungen aufgerufen werden in CPP/7zip/UI/Console/Main.cpp Datei erforderlich. Alternativ können Sie 7Zip des Autors stecken die Funktion in Tracker zu beenden. Es gibt mehrere Anfragen auf dieser und einer von ihnen ist hier .

7-zip hat nicht eine solche Option. Plus die bei jeder Datei gedruckten Zeilen komprimiert werden an der gleichen Stelle ohne Neue-Zeile-zu-Anzeige sollen, die vorherige Löschung, die eine kühle Wirkung hat. Leider, in manchen Kontexten (Jenkins ...) es erzeugt mehrere Zeilen ?? die Konsole überfluten.

NUL (Fenster) ist vielleicht eine Lösung.

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

Sie können stoppen 7-Zip von Aufforderungen Anzeige durch den -y-Schalter. Das wird ja auf alle Aufforderungen beantworten. Verwenden Sie diese Option nur, wenn Sie sicher sind.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top