首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在锈蚀中覆盖多行

如何在锈蚀中覆盖多行
EN

Stack Overflow用户
提问于 2022-05-28 14:27:14
回答 1查看 215关注 0票数 0

我试图打印正在进行的过程中的状态,如下所示:

代码语言:javascript
运行
复制
|Label-1    |Label-2    |Label-3
|Data-1     |Data-2     |Data-3
|Data-1     |Data-2     |Data-3
|Data-1     |Data-2     |Data-3

有以下代码:

代码语言:javascript
运行
复制
    println!("|{0:<25} | {1:<1} | {2:<10}", "URL Path", "Status Code", "Version");
    println!("{0:<25} | {1:<11} | {2:<10?}", resp.request_url, resp.status_code, resp.version);
    unsafe {
        if (FOUND.len() != 0) {
            for elem in FOUND.iter() {
                println!("\n\n{0:<25} | {1:<11} | {2:<10?}", elem.request_url, elem.status_code, elem.version);
            }
        }
        if (resp.status_code == 200) {
            FOUND.push(resp)
        }
    }
    stdout().execute(cursor::MoveUp(3));
    stdout().execute(terminal::Clear(terminal::ClearType::FromCursorDown));

行的字符串必须用新字符串覆盖。如果它是一行,我可以执行print!("\r{} | {} | {}",data1,data2,data3),但是由于它是多行的,所以回车会造成混乱。

PS:任何例子都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2022-06-02 15:27:57

我不知道你到底有什么问题,但是持有一个锁着的stdout对我来说是有效的:

代码语言:javascript
运行
复制
use std::io::{stdout, Write};
use crossterm::{
    cursor, terminal, Result, ExecutableCommand
};

fn main() -> Result<()> {
    let mut stdout = stdout(); // lock stdout and use the same locked instance throughout

    writeln!(stdout, "|{0:<25} | {1:<11} | {2:<10}", "URL Path", "Status Code", "Version")?;
    writeln!(stdout, "|{0:<25} | {1:<11} | {2:<10}", "https://google.com", 200, 9)?;
    writeln!(stdout, "|{0:<25} | {1:<11} | {2:<10}", "https://yahoo.com", 200, 15)?;

    // wait 2 seconds before replacing lines
    std::thread::sleep(std::time::Duration::from_secs(2));

    stdout.execute(cursor::MoveUp(2))?;
    stdout.execute(terminal::Clear(terminal::ClearType::FromCursorDown))?;
    writeln!(stdout, "|{0:<25} | {1:<11} | {2:<10}", "https://bing.com", 200, 3)?;
    writeln!(stdout, "|{0:<25} | {1:<11} | {2:<10}", "https://duckduckgo.com", 200, 1)?;

    Ok(())
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72416445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档