【问题标题】:How to execute a command in a shell running as a child process?如何在作为子进程运行的 shell 中执行命令?
【发布时间】:2020-09-09 08:28:12
【问题描述】:

根据How do I invoke a system command in Rust and capture its output? 的回答,我可以执行一个命令,该命令本身会生成一个shell 来执行命令。

use std::process::Command;

Command::new("sh")
    .spawn()
    .expect("sh command failed to start");

是否可以在这个新获得的 shell 中执行来自 Rust 的命令?

【问题讨论】:

  • Shell 只是将命令作为标准输入并在标准输出上生成输出。所以理论上你需要做的就是捕获标准输入/标准输出并与它们交互(写入标准输入并从标准输出读取)。但是,由于阻塞和缓冲以及朋友,这通常是一件令人头疼的事情,这就是为什么存在诸如期望/pexpect 之类的工具来处理所有繁琐的位的原因。

标签: rust


【解决方案1】:
let mut child = Command::new("sh").stdin(Stdio::piped())
    .stderr(Stdio::piped())
    .stdout(Stdio::piped())
    .spawn()?;

child.stdin
    .as_mut()
    .ok_or("Child process stdin has not been captured!")?
    .write_all(b"something...")?;

let output = child.wait_with_output()?;

来源:External Command in The Rust Cookbook

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    • 1970-01-01
    • 1970-01-01
    • 2019-09-24
    • 1970-01-01
    • 2020-11-06
    相关资源
    最近更新 更多