题
我想提取一个 7-拉链 归档在 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“查找”命令,仅输出特定数据,即
7z.exe -o some_dir x some_archive.7z | FIND "ing archive"
这只会导致以下输出。
创建存档some_archive.7z
或者
更新存档some_archive.7z **
我的最终解决方案是将命令更改为
... some_archive.7z | FIND /V "ing "
笔记 双倍行距 在“ in”之后。这导致了以下输出。
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“压缩”,但“查找”也将删除具有该单词的错误消息。您不会被警告。由于较新的7 ZIP版本,也可能必须更改“查找”。
7-zip具有强制性的详细输出,没有沉默模式,混合stderr和stdout(*),不能保存UNIX权限等。这些反标准行为将“ 7-zip”放在一个不好的地方。例如,“ tar+bzip2”或“ zip”。
(*)“上游(Igor Pavlov)不想为消息发出不同的输出,即使他被要求多次这样做:(” 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 and stderr = pipe创建您的popen对象从孩子那里检索输出)。
否则尝试这样做:
%COMSPEC% /c "%ProgramFiles%\7-Zip\7z.exe" ...
扩展@matthew的答案和这个答案 https://superuser.com/questions/194659/how-to-disable-theaste-theput-of-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:“^compressing”:线的开始,压缩,2个空间
- /c:“^扫描$”:单独扫描一条线(开始/结束)
- /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没有这样的选项。另外,在每个压缩文件中打印的行应该显示在同一位置,而无需换行,从而擦除前一个,这具有很酷的效果。不幸的是,在某些情况下(詹金斯......)它产生了几行☹️淹没控制台。
NUL
(Windows)也许是一种解决方案。
7-zip.exe -o some_dir x some_archive.7z>NUL
您可以使用-Y开关停止7个拉链显示提示。这将对所有提示回答是。仅当您自信时才使用此功能。