如何清除stdout的当前行?

时间:2015-03-03 03:51:57

标签: rust

我正在尝试在Rust中创建一个打印到stdout的状态指示器。在其他语言中,我使用了一个函数来清除当前的stdout行,同时保持其他行不变。我似乎无法找到Rust等效物。有吗?这是我正在寻找的一个小例子

for i in 0..1000 {
    stdio::print(format!("{}", i).as_slice));
    stdio::clear();
}

3 个答案:

答案 0 :(得分:7)

在ANSI终端上(几乎除了Windows上的命令提示符之外的所有内容),\r会将光标返回到当前行的开头,允许您在其上面写入其他内容(新内容或空格到擦掉你已写的东西。)

print!("\r")

标准库中没有任何内容可以以平台中立的方式执行此操作。

答案 1 :(得分:2)

cli是一个箱子(docs),它似乎非常适合解决这个问题。它还附带了一些其他常见的好东西,如进度条和样式提示。

cli::clear应该是你想要的功能。

使用重复之类的主要困难:

println!("\r");

只要支持相关操作系统,使用cli :: clear时,这不会与OS兼容。使用cli箱子的另一个好处是,它是一个更高层次的抽象,以清晰的方式传达你的实际意义。

您要清除终端。

你不是想重复回车。

此处还有其他类似的例程。即进度条,这是您要解决的问题。

答案 2 :(得分:0)

使用退格的ASCII代码是一个选项,例如:

print!("12345");
print!("{}", (8u8 as char));

由于打印退格字符(ascii代码8),在删除5之后,这将最终输出“1234”。奇怪的是,Rust不会将\ b识别为有效的角色转义。