我希望在Python脚本中提取7-Zip存档。它可以正常工作,但会输出大量提取细节。
有没有一种方法在提取时避免冗长的信息?我没有找到任何“静默”命令行选项来运行 7z.exe
。
我的命令是
7z.exe -o some_dir x some_archive.7z
我在寻找同样的内容时发现了这个问题,但是我自己解决了!假设使用 Windows / DOS 处理该命令,则更简单的解决方案是将您的命令更改为:
我在搜索相同内容时遇到了这个问题,但我已经自行解决了!如果使用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
这将取消单个文件处理,但生成总体操作的摘要,而不管操作类型。
一种可能的方法是使用 popen
来生成子进程,这样它的输出将会返回给父进程进行处理或显示(如果需要),否则可以完全忽略(创建 popen
对象时使用 stdout=PIPE
和 stderr=PIPE
可以检索子进程的输出)。
7-zip.exe u <Target> <Source> | Select-String "Error" -Context 10
这将仅显示“Error”消息行及其周围的10行(或任何数量),以捕获特定错误输出。
扩展 @Matthew 的回答和这个回答 https://superuser.com/questions/194659/how-to-disable-the-output-of-7-zip 我使用 FINDSTR 替代 find 命令,这样我就可以链式排除多行和空白行:
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"
7zip没有显式的命令行提取"quiet"或"silent"模式。
一种可能的方法是使用popen生成子进程,这样它的输出将返回到父进程进行处理/显示(如果需要),否则完全忽略(创建popen对象时,使用stdout=PIPE和stderr=PIPE可以检索子进程的输出)。
否则尝试这样做:
%COMSPEC% /c "%ProgramFiles%\7-Zip\7z.exe" ...
| FIND
是一种很好的替代方法,可以显示发生了什么,而不显示无关紧要的文本。7z x -y some_archive.7z | tail -4
Everything is Ok
Size: 917519
Compressed: 171589
7-zip.exe -o some_dir x some_archive.7z>NUL
... some_archive.7z | FIND /V "ing " | FIND /V "Igor Pavlov"
- mles7-Zip_19.0\7za.exe -bsp0 x MyArchive.7z -oMyArchiveOutputPath
- Ionut V.