如何根据程序的输出在屏幕上显示进度条?

如何根据程序的输出在屏幕上显示进度条?

我使用 CUDA 进行了一次计算,整个计算大约需要 12 分钟。我在文件中使用此命令.sh来运行程序:

CUDA_VISIBLE_DEVICES=0 ./a1.out | tee -a output.txt &
CUDA_VISIBLE_DEVICES=1 ./a2.out | tee -a output.txt &
CUDA_VISIBLE_DEVICES=2 ./a3.out | tee -a output.txt &
CUDA_VISIBLE_DEVICES=3 ./a4.out | tee -a output.txt &
CUDA_VISIBLE_DEVICES=4 ./a5.out | tee -a output.txt &
CUDA_VISIBLE_DEVICES=5 ./a6.out | tee -a output.txt &

现在我想在命令行窗口中为用户显示此过程的进度条。有什么办法吗?

答案1

使用pv(1)在线模式:

COMMAND | pv --line-mode --size 1000 >> output.txt

或更短

COMMAND | pv -ls 1000 >> output.txt

-s/--size设置预期输出单元的数量(默认为字节或行模式下的行)。

如果您想要捕获输出并显示并行运行的多个命令的进度,您可以使用复合语句来实现:

{ COMMAND1 & COMMAND2 & COMMAND3; } | pv -ls 1000 >> output.txt

在这种情况下,您需要指定预期输出单元的数量所有命令总计

演示

for i in {1..200}; do sleep 0.1; echo "$i"; done | pv -ls 200 > /dev/null

相关内容