使用 pv 估计运行命令所需的时间

使用 pv 估计运行命令所需的时间

我正在用自定义 Python 脚本处理一些文本文件。为了跟踪进度,我使用了 pv 命令。目前我只解析了几 MB 的数据,但想知道处理几 GB 需要多长时间。我使用的命令是

python command | pv -l -s 2g

这给了我输出

1,56M 0:03:06 [8,38k/s] [>                                    ]  0%             

我知道我可以根据这些参数计算时间,但我想使这个过程自动化。

阅读完手册后,我发现 -e 选项可以提供给定大小的 ETA

python command | pv -l -e -s 2g

现在我可以看到命令运行时显示的 ETA,但脚本中还有许多其他日志覆盖了此消息。有没有办法在脚本结束时显示预计时间(或保存最后给出的 ETA)?

答案1

尝试:

python command | pv -l -e -s 2g -f 2>pv.log
tr '\r' '\n' <pv.log | grep -v '^[[:space:]]*$' | tail -n1

解释:

  • 您可以pv通过将 fd 2 (stderr) 重定向到该文件来将打印输出转储到该文件中。您还需要强制pv生成输出(使用-f),因为通常它仅在检测到 stderr 是终端时才生成输出。

  • 如果你以这种方式转储打印输出,文件将包含全部打印件,而不仅仅是最后一份。

  • 打印输出将由“return”字符分隔\r,该字符指示终端将光标移动到行首而不切换到下一行,因此下一个打印输出将覆盖前一个打印输出。该tr命令将“return”转换\r为常规的“换行符” \n

  • 要查看 的原始内容pv.log,请尝试cat -A pv.log。 (cat将显示\r^M。)

  • 删除grep任何仅包含空白(空格或制表符)的行,因为这些行可能会出现在最后的打印输出之后。

  • tail提取最后的打印输出。

相关内容