我想提取一个 7-拉链 归档在 Python 脚本中。它工作得很好,除了它会吐出提取细节(在我的例子中这是巨大的)。

有没有办法在提取时避免这些冗长的信息?我没有找到任何“静默”命令行选项 7z.exe.

我的命令是

7z.exe -o some_dir x some_archive.7z
有帮助吗?

解决方案

一种可能性是用 popen, ,因此其输出将返回父母进行处理/显示(如果需要)或完全忽略(创建您的 popen 对象 stdout=PIPEstderr=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行(或任何数字),以捕获特定于错误的输出。

检查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

您可以使用-Y开关停止7个拉链显示提示。这将对所有提示回答是。仅当您自信时才使用此功能。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top