在How to execute a command in a shell running as a child process?处,我要执行多个命令。
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()?;
有可能做这样的事情吗?
.write_all(b"something...")?
.write_all(b"something...")?;
答案 0 :(得分:0)
链接方法调用适用于按照约定返回self
或&mut self
的方法。无法保证 all 方法能够做到这一点,有些方法只是具有更有用的返回值。例如,write_all()
返回Result<(), io::Error>
,声明它除了显示写入成功还是失败之外没有其他价值。
要两次调用这种方法,您需要将值保存到局部变量中
let child_stdin = child
.stdin
.as_mut()
.ok_or("Child process stdin has not been captured!")?;
child_stdin.write_all(b"something...")?;
child_stdin.write_all(b"something...")?;
答案 1 :(得分:0)
这不是 Rust 中的问题,而是 sh 。在 sh 中,您需要用换行符("\n"
)分隔命令:
//...
.write_all(b"command1\ncommand2")?;
//...
这也应该起作用:
//...
let child_stdin = child.stdin
.as_mut()
.ok_or("Child process stdin has not been captured!")?;
child_stdin.write_all(b"command1\n")?;
child_stdin.write_all(b"command2\n")?;
//...