【问题标题】:Rust: Write stdout into a buffer or StringRust:将标准输出写入缓冲区或字符串
【发布时间】:2023-03-23 04:07:01
【问题描述】:

我正在尝试生成一个进程并将其标准输出记录到一个文件中。

我的尝试是:

let mut log = String::new();

let output = Command::new("git")
        .current_dir(&cwd)
        .arg("pull")
        .arg("--rebase=merges")
        .output()
        .expect("Error doing git pull");

log.push_str("\nOUTPUT\n");
log.push_str(&output.stdout);

但这会导致类型不匹配的错误。如何捕获 output.stdout 以写入字符串,或者更好地写入文件?

谢谢!

【问题讨论】:

  • 你试过匹配类型吗? Command::output 返回字节向量,而 push_str 采用&str。如果有这样的函数需要一个字节序列并将其转换为&str。如果它存在,它可能会在std::str 模块中定义。

标签: rust process io stdout


【解决方案1】:

Command 输出表示为一系列字节。使用std::str::from_utf8 将其转换为str

use std::str;
log.push_str(match str::from_utf8(&output.stdout) {
    Ok(val) => val,
    Err(_) => panic!("got non UTF-8 data from git"),
});

Try it in the playground

【讨论】:

  • 另外,如果该命令可能输出非UTF8字符,并且您希望将非UTF8字符转换为替换字符而不是出错,您可以使用String::from_utf8_lossy
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-16
相关资源
最近更新 更多