我正在用自定义 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
提取最后的打印输出。