代码之家  ›  专栏  ›  技术社区  ›  Lucas Lima

如何打印对象的元素?

  •  0
  • Lucas Lima  · 技术社区  · 2 年前

    我有一个rust的小程序,不是货运项目。

    use std::process::Command;
    fn main() {
        let result= Command::new("git").arg("status").output().expect("Ok");
        println!("{:?}", result);
    }
    

    但在建立和运行它之后,我得到了

    Output { status: ExitStatus(unix_wait_status(0)), stdout: "On branch main\nYour branch is up to date with 'origin/main'.\n\nUntracked files:\n  (use \"git add <file>...\" to include in what will be committed)\n\tbasics/guessing_game/\n\tcmdtest\n\tcmdtest.rs\n\nnothing added to commit but untracked files present (use \"git add\" to track)\n", stderr: "" }
    

    如果我尝试:

    use std::process::Command;
    fn main() {
        let result= Command::new("git").arg("status").output().expect("Ok");
        println!("{:?}", result.stdout);
    }
    

    我明白了

    [79, 110, 32, 98, 114, 97, 110, 99, 104, 32, 109, 97, 105, 110, 10, 89, 111, 117, 114, 32, 98, 114, 97, 110, 99, 104, 32, 105, 115, 32, 117, 112, 32, 116, 111, 32, 100, 97, 116, 101, 32, 119, 105, 116, 104, 32, 39, 111, 114, 105, 103, 105, 110, 47, 109, 97, 105, 110, 39, 46, 10, 10, 85, 110, 116, 114, 97, 99, 107, 101, 100, 32, 102, 105, 108, 101, 115, 58, 10, 32, 32, 40, 117, 115, 101, 32, 34, 103, 105, 116, 32, 97, 100, 100, 32, 60, 102, 105, 108, 101, 62, 46, 46, 46, 34, 32, 116, 111, 32, 105, 110, 99, 108, 117, 100, 101, 32, 105, 110, 32, 119...
    

    如何以用户友好的格式打印stdout中的字符串而不是数字?

    1 回复  |  直到 2 年前
        1
  •  4
  •   Chayim Friedman    2 年前

    标准输出可能不是有效的unicode,在这种情况下,您无法打印它。如果您确信会这样(git可能就是这样),您可以使用 String::from_utf8().unwrap() :

    fn main() {
        let result = Command::new("git").arg("status").output().expect("Ok");
        println!("{}", String::from_utf8(result.stdout).unwrap());
    }
    

    如果你不知道,你可以查一下 Result from_utf8() 返回或使用 String::from_utf8_lossy() 将无效字符转换为 U+FFFD REPLACEMENT CHARACTER :

    fn main() {
        let result = Command::new("git").arg("status").output().expect("Ok");
        println!("{}", String::from_utf8_lossy(&result.stdout));
    }