gpt4 book ai didi

linux - 是否有比 `std::process::Command` 更低级别的接口(interface)来将单个字符串作为进程执行?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:04:41 24 4
gpt4 key购买 nike

在 Rust 中是否有类似的东西:

os.run("/bin/bash ln -s /dir1 /dir2");

我希望能够使用类似于我在 ptty 中使用的字符串表达式来生成进程。

我发现用于执行此操作的唯一实用程序是 std::process::Command,但它没有很好的文档记录并且似乎太复杂且难以调试。

In Rust, how do I invoke a system command and capture its output?这给出了 std::process::Command 作为答案,因此我将查找它指定为一个可能的选项。但是,我正在寻找一个较低级别的接口(interface)来使 std::process::Command 执行单个字符串作为查询,而不是强制我一个一个地向它提供参数。

最佳答案

不,标准库中没有这样的东西。如评论中所述,Command 较低级别的接口(interface)。采用单个字符串的 Shell 和其他工具必须对字符串进行非常巧妙的解析,以便将其拆分成多个部分。此解析非常重要,并且可能因 shell 而异!

当然,您始终可以编写自己的简化解析器:

use std::process::Command;

fn main() {
let args = "ls -l /etc /tmp";
let args: Vec<_> = args.split(" ").collect();

let output = Command::new(args[0])
.args(&args[1..])
.output()
.expect("Couldn't run it");

println!("{:?}", ::std::str::from_utf8(&output.stdout));
println!("{:?}", ::std::str::from_utf8(&output.stderr));
}

but it's not well documented

我显然有偏见,但我不明白如何更多记录它。每个有用的方法都有描述它的散文和演示它的示例。

and seems too complex

我不确定为什么;也许选择的数量太多了,但实际上需要控制。

and hard to debug.

我不确定需要进行哪些调试 — 代码是否可以编译,然后是否执行。编译器错误通常很有用,这种性质的运行时错误通常取决于操作系统。

关于linux - 是否有比 `std::process::Command` 更低级别的接口(interface)来将单个字符串作为进程执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45680349/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com