質問
抽出したい 7-zip Pythonスクリプトのアーカイブ。抽出の詳細を吐き出すことを除いて、それは正常に動作します(私の場合は巨大です)。
抽出中にこの冗長な情報を回避する方法はありますか? 「サイレント」コマンドラインオプションは見つかりませんでした 7z.exe
.
私の命令はです
7z.exe -o some_dir x some_archive.7z
解決
1つの可能性は、子のプロセスを生み出すことです popen
, 、したがって、その出力は親に戻って処理/表示される(必要な場合)または完全に無視されます(作成する popen
でオブジェクト stdout=PIPE
と stderr=PIPE
子供から出力を取得できるように)。
他のヒント
同じものを探しているときにこれに出会いましたが、自分で解決しました!コマンドがWindows / DOSで処理されていると仮定すると、より簡単な解決策は、コマンドを次のように変更することです。
7z.exe -o some_dir x some_archive.7z > nul
つまり、出力を画面ではなくnullファイルに向けます。
または、特定のデータのみを出力するために、出力をDOSの「検出」コマンドにパイプすることもできます。
7z.exe -o some_dir x some_archive.7z | FIND "ing archive"
これにより、次の出力が生じるだけです。
アーカイブSome_archive.7zを作成します
また
アーカイブSome_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
これにより、個々のファイル処理が削除されますが、操作タイプに関係なく、全体的な操作の概要を作成します。
彼らが言ったように、あなたが使用できる画面充填メッセージのほとんどを非表示にするために... some_archive.7z | /v「圧縮」を検索しますが、「find」は、その単語のあるエラーメッセージも削除します。あなたは警告されません。新しい7-zipバージョンのために、その「Find」も変更する必要がある場合があります。
7-zipには、強制冗長出力、サイレンスモードなし、stderrとstdout(*)を組み合わせ、Unix許可などを節約しません。これらの反スタンダード行動は一緒になって、「7-zip」を悪い場所に置きます。たとえば、「tar+bzip2」または「zip」。
(*)「Upstreem(Igor Pavlov)は、何度かそうするように頼まれているにもかかわらず、メッセージのさまざまな出力を作成したくありません:(」 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には、コマンドライン抽出のための明示的な「静かな」または「サイレント」モードはありません。
1つの可能性はPopenで子プロセスを生成することです。そのため、その出力は親に戻って処理/表示されるか(必要に応じて)、または完全に無視されます(stdout = pipeとstderr = pipeでPopenオブジェクトを作成します。子供から出力を取得するため)。
それ以外の場合はこれを試してみてください:
%COMSPEC% /c "%ProgramFiles%\7-Zip\7z.exe" ...
@matthewの答えとこの答えを拡大します https://superuser.com/questions/194659/how-to-disable-the-output-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:正規表現
- /C:「^圧縮」:ラインの開始、圧縮、2つのスペース
- /c: "^Scanning $":単語は独自にラインでスキャンします(開始/終了)
- /c: "^$":その間に何もなしに開始と終了、すなわち、空白行
スペースがスペースになるように /cを使用しています。そうでなければ、この単純なバージョンのように、複数の単語の間のセパレーターです。
FINDSTR /V "Compressing Pavlov Scanning Everytyhing"
(新しいバージョンで文言が変更された場合、または有用な行が「圧縮」という単語から始まる場合、同じ警告が存在します。予想どおりに機能しません)。
| FIND
重要でないテキストを表示せずに何が起こったかを示すための良い代替手段です。
PowerShellから7-Zip.exeを実行していて、エラーだけを見たい場合は、次のようなことを試すことができます。
7-zip.exe u <Target> <Source> | Select-String "Error" -Context 10
これにより、「エラー」メッセージ行と周囲の10行(または任意の数値)が表示され、エラー固有の出力がキャプチャされます。
7-zipにはそのようなオプションはありません。さらに、圧縮された各ファイルに印刷された行は、Newlineなしで同じ場所に表示されることになっており、以前のファイルを消去します。これはクールな効果があります。残念ながら、一部のコンテキスト(Jenkins ...)では、コンソールにあふれているいくつかのラインが生成されました。
NUL
(Windows)はおそらく1つの解決策です。
7-zip.exe -o some_dir x some_archive.7z>NUL
-yスイッチを使用して、7 -zipがプロンプトを表示するのを停止できます。これにより、すべてのプロンプトに「はい」と答えます。自信があるときにのみこれを使用してください。