我注意到很多命令行工具(例如 wget)会将进度显示为数字或进度条,该进度条会随着进程的完成而前进。虽然这个问题并不是真正特定于语言的,但在我最常用于命令行工具的语言(C++、Node.js、Haskell)中,我还没有看到一种方法来做到这一点。
这里是一个例子,当 wget 下载一个文件时,终端的 单行 的三个快照:
与其他信息一起,wget 会显示一个进度条 (<=>),它会在下载文件时前进。到目前为止下载的数据量(6363、179561、316053)和当前下载速度(10.7KB/s、65.8KB/s、63.0KB/s)也会更新。这是怎么做到的?
理想情况下,请包含来自上述三种语言中的一种或多种语言的代码示例。
最佳答案
只需打印一个 CR(不带换行符)来覆盖一行。下面是 perl 中的示例程序:
#!/usr/bin/env perl
$| = 1;
for (1..10) {
print "the count is: $_\r";
sleep(1)
}
我还禁用了输出缓冲 ($| = 1
),以便打印命令立即将其输出发送到控制台而不是缓冲它。
Haskell 示例:
import System.IO
import Control.Monad
import Control.Concurrent
main = do
hSetBuffering stdout NoBuffering
forM_ [1..10] $ \i -> do
putStr $ "the count is: " ++ show i ++ "\r"
threadDelay 1000000
关于c++ - 命令行工具输出后如何改变其输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31900566/