我想在Python脚本中提取7-Zip存档。它工作正常,除了它吐出提取细节(这在我的情况下是巨大的)。
有没有办法在提取时避免这些冗长的信息?我没有找到7z.exe
的任何“静音”命令行选项。
我的命令是
7z.exe -o some_dir x some_archive.7z
一种可能性是使用popen
生成子进程,因此它的输出将返回到父进行处理/显示(如果需要)或者完全忽略(使用popen
和stdout=PIPE
创建stderr=PIPE
对象以便能够检索输出来自孩子)。
您可以使用-y开关停止7-Zip显示提示。这将对所有提示回答“是”。只有在您有信心时才使用此功能。
我在寻找同样的时候遇到过这个,但我自己解决了!假设使用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"
这只会产生以下输出。
创建存档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 | FIND / V“压缩”但“FIND”也会删除包含该词的错误消息。你不会被警告。由于更新的7-zip版本,“FIND”也可能不得不改变。
7-zip有强制详细输出,没有静音模式,混合stderr和stdout(*),不保存Unix权限等。这些反标准行为将“7-zip”放在一个不好的地方进行比较时例如,“tar + bzip2”或“zip”。
(*)“上游(伊戈尔巴甫洛夫)不希望为消息做出不同的输出,即使他被多次要求这样做:(”http://us.generation-nt.com/answer/bug-346463-p7zip-stdout-stderr-help-166693561.html - “Igor Pavlov不想改变这种行为”http://sourceforge.net/tracker/?func=detail&aid=1075294&group_id=111810&atid=660493
7zip没有明确的“安静”或“静默”模式用于命令行提取。
一种可能性是使用popen生成子进程,因此它的输出将返回到父进行处理/显示(如果需要)或者完全忽略(用stdout = PIPE创建你的popen对象并且stderr = PIPE能够检索孩子的输出)。
否则尝试这样做:
%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$"
我正在使用/ 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没有这样的选择。另外,压缩的每个文件上打印的行应该显示在没有换行符的同一位置,擦除前一个,这具有很酷的效果。不幸的是,在某些情况下(詹金斯......)它产生了几行☹️充斥着控制台。
NUL
(windows)可能是一个解决方案。
7-zip.exe -o some_dir x some_archive.7z>NUL