我想在Rust中执行shell命令.在Python中我可以这样做:
import os
cmd = r'echo "test" >> ~/test.txt'
os.system(cmd)
Run Code Online (Sandbox Code Playgroud)
但鲁斯特只有std::process::Command.我怎么能执行shell命令cd xxx && touch abc.txt呢?
你真的应该避免system.它的作用取决于正在使用的shell以及您正在使用的操作系统(您的示例几乎肯定不会在Windows上执行您所期望的操作).
如果你真的迫切需要调用一个shell一些命令,你可以做轻微的只是直接执行壳(如使用更好的-c开关对于bash).
如果由于某种原因,上述情况不可行,您可以保证您的程序只能在有问题的shell可用的系统上运行,并且用户不会运行其他任何东西......
...然后你可以像使用常规C 一样使用system来电libc.这算作FFI,所以你可能想看一下std::ffi::CStr.
每个人都在寻找:
use std::process::Command;
fn main() {
let output = Command::new("echo")
.arg("Hello world")
.output()
.expect("Failed to execute command");
assert_eq!(b"Hello world\n", output.stdout.as_slice());
}
Run Code Online (Sandbox Code Playgroud)
有关更多信息和示例,请参阅docs。
您想模拟&&。std::process::Command有一个status方法返回a Result<T>并Result实现and_then。您可以and_then像使用,&&但以更安全的Rust方式使用:)
| 归档时间: |
|
| 查看次数: |
3456 次 |
| 最近记录: |