如何将std::process::Command格式化为字符串以进行调试

3
在我的第一个 Rust 应用程序中,我使用 std::process::Command 发出了许多命令。如果其中一个命令不正确,我想看看是什么,并且希望它在命令行上显示得很漂亮。
目前,我的代码看起来像这样(简化版):
let mut command = std::process::Command::new("ls");
command.arg("-la");
println!("{:?}", command)

这样做没问题,但是在打印字符串时它会将所有内容都包含在引号中。输出看起来像:"ls" "-la"
我该如何格式化它,以便它不会将每个参数都用双引号括起来,而是产生一个易于阅读的命令?类似于:ls -la
我看到了一个相关问题,但它提供的解决方案与此相同。

在大多数运行Unix shell的操作系统上,执行“ls”“-la”命令应该可以直接使用。然而在Windows系统中,必须进行一些转义操作,使得事情变得更为复杂。因此,我们可以考虑使用代替方案,生成一个可直接复制并且运行的命令。 - mcarton
我从未想过命令可以这样运行。知道了很好。但为了可读性,我仍然希望它们不要被引用。我会更新问题的。 - counterbeing
1个回答

2
命令添加引号是因为虽然它们很“丑陋”,但它们不会破坏命令。另一方面,如果没有它们,则可能会破坏命令!解析是否需要它们以及包括所有边缘情况可能会变得非常复杂。
如果您拥有严格受控的用例集,并且确定您不需要它们,请将其删除:
let mut command = std::process::Command::new("ls");
command.arg("-la");
println!("{}", format!("{:?}", command).replace("\"", ""));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接