Извлечение 7-zip-файла "Syrecogle" - опция командной строки

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

  •  04-10-2019
  •  | 
  •  

Вопрос

Я хочу извлечь 7-zip. Архив в сценарии Python. Он работает нормально, за исключением того, что он выплесет детали извлечения (которая огромен в моем случае).

Есть ли способ избежать этой многословной информации при извлечении? Я не нашел никакой «бесшумный» вариант командной строки 7z.exe.

Моя команда есть

7z.exe -o some_dir x some_archive.7z
Это было полезно?

Решение

Одной из возможностей было бы выпустить детский процесс с popen, поэтому его вывод вернется к родителю, который будет обработан / отображаться (если желательно) или полностью полностью игнорируется (создать свой popen объект с stdout=PIPE а также stderr=PIPE Чтобы иметь возможность извлечь вывод от ребенка).

Другие советы

Я только что наткнулся на это при поиске то же самое, но я сам решил его! Предполагая, что команда обрабатывается с Windows / DOS, более простым решением является изменение вашей команды на:

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

То есть направьте вывод на нулевой файл, а не на экране.

Или вы могли бы выводить вывод в команду DOS «Find» только для вывода конкретных данных, то есть

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

Это будет просто привести к следующему выходу.

Создание архива quote_archive.7z.

или

Обновление архива que_archive.7z **


Мое окончательное решение было изменение команды на

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

Примечание двойной пробел после «ing». Это привело к следующему выходу.

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

Scanning

Updating some_archive.7z


Everything is Ok

Это удаляет отдельную обработку файлов, но дает сводку общей операции, независимо от типа операции.

Как будто они сказали, чтобы скрыть большую часть сообщений наполнения экрана, которые вы можете использовать ... emoChive.7z | Найти / v "Сжидование" Но что «находку» также удалит сообщения об ошибках, которые имели это слово. Вы не будете предупреждены. Что «находки» также могут быть изменены из-за более новой 7-zip-версий.

7-ZIP имеет принудительный вывод Verbose, без режима молчания, смешивает STDERR и STDOUT (*), не сохраняет разрешения Unix и т. Д. Эти поведения против стандартов вместе положите «7-zip» в плохом месте, когда их по сравнению с «TAR + BZIP2» или «ZIP», например.

(*) «Upstream (Игорь Павлов) не хочет делать разные выходы для сообщений, даже если его было задано несколько раз, чтобы сделать это :( http://us.generation-nt.com/answer/bug-346463-p7zip-stdout-stderr-help-166693561.html. - «Игорь Павлов не хочет менять это поведение» http://sourceforge.net/tracker/?func=detail&aid=1075294&group_id=111810&atid=660493.

7zip не имеет явного «тихого» или «тихого» режима для экстракции командной строки.

Одной из возможностей было бы выпустить дочерний процесс с POPEN, поэтому его вывод вернется к родителю, который будет обрабатываться / отображать (если желательно) или полностью проигнорировано (создайте свой popen объект со Stdout = Pipe и STDERR = труба, чтобы иметь возможность Чтобы получить вывод от ребенка).

В противном случае попробуйте сделать это:

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

Расширение ответа @mathew и этот ответ https://superuser.com/questions/194659/ov-to-disable-the-ousput-of-7-zip.Я использую FindStr вместо того, чтобы найти, поэтому я могу цепить несколько строк, чтобы исключить и пустые строки:

7za.exe a test1.zip .\foldertozip | FINDSTR /V /R /C:"^Compressing  " /C:"Igor Pavlov" /C:"^Scanning$" /C:"^$" /C:"^Everything is Ok$"
  • / V: исключить
  • / R: regex
  • / C: «^ Сжатие»: начало линии, сжатия, 2 пробела
  • / C: «^ сканирование $»: слово сканирование самостоятельно на линии (начнется / конец)
  • / C: «^ $»: начало и конец без чего-либо между ними, то есть пустой строки

Я использую / c, чтобы пространство - это пространство, в противном случае это сепаратор между несколькими словами, чтобы изгнать как в этой более простой версии:

FINDSTR /V "Compressing Pavlov Scanning Everytyhing"

(Те же оговорки существуют, если формулировка изменяется в новой версии, или если полезная строка начинается со словом «сжатие», он не будет работать должным образом).

То | FIND Является хорошей альтернативой, чтобы показать, что произошло без отображения незначительного текста.

Если вы используете 7-zip.exe от PowerShell, и вы хотите просмотреть ошибки, то вы можете попробовать что-то вроде этого:

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

Это будет отображать только строку сообщений «Ошибка» и окружающие 10 строк (или любое число) для захвата определенного вывода ошибки.

Исследование источника 7ZIP я нашел скрытую -ba Переключатель, который, кажется, делает трюк. К сожалению, это не закончено. Мне удалось сделать это работать с несколькими модификациями источников, но это просто взлом. Если кто-то заинтересован, вариант переменной называется options.EnableHeaders и изменения требуются в CPP/7zip/UI/Console/Main.cpp файл. В качестве альтернативы вы можете позвонить автору 7zip, чтобы закончить функцию в трекер. Отказ Есть несколько запросов на это, и один из них здесь.

7-zip не имеет такого варианта. Плюс линии, напечатанные на каждом файле сжатых файлов, должны отображаться на одном месте без новой строки, стирание предыдущего, которая имеет крутой эффект. К сожалению, в некоторых контекстах (Дженкинс ...) это произвело несколько строк ☹️ наводнение консоли.

NUL (Windows) - это может быть одним из решений.

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

Вы можете остановить 7-zip от отображения подсказок, используя переключатель -Y. Это ответит да для всех подсказок. Используйте это только тогда, когда вы уверены в себе.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top