use std::{ io::Write, process::{Child, Command, Stdio}};
fn ffmpeg(err:fn()) ->Child {
let mut o = Command::new("ffmpeg")
.arg("-f")
.arg("gdigrab")
.arg("-i")
.arg("desktop")
.arg("-pix_fmt")
.arg("yuv420p")
.arg("H:/b.mp4")
.stdin(Stdio::piped())
.stderr(Stdio::piped())
.stdin(Stdio::piped())
// .output()
.spawn()
.expect("error!");
let output = o.wait_with_output().unwrap(); // move 移动发生在这
if !output.status.success() {
println!("{:#?}",String::from_utf8(output.stderr));
err();
}
o // 导致这个返回报错
}
因为 标准库中的 Child 没有 Copy 特征 ,自己试了一些也是没用 我想正确返回 o 怎么处理
1
共 4 条评论, 1 页
评论区
写评论嗯,学习了
--
👇
Aya0wind: 读一下wait_with_output的官方文档
你调用这个函数的时候,子进程已经退出了,之后你咋往里写?不然为啥这个函数要move掉o,因为子进程已经没了,你要读子进程的输出,直接读他的stdout即可。
读一下wait_with_output的官方文档
你调用这个函数的时候,子进程已经退出了,之后你咋往里写?不然为啥这个函数要move掉o,因为子进程已经没了,你要读子进程的输出,直接读他的stdout即可。
--
👇
WingDust:
--
👇
alexlee85: 问题不是出在你说的 标准库中的 Child 没有 Copy 特征 问题是你在使用 let output = o.wait_with_output().unwrap(); 这句话的时候,o这个Child的所有权已经转移了,所以你后面就不能用o这个变量了。
你可以直接返回output嘛
我要在其他地方 调用
o.stdin.as_mut().ok_or("qq").unwrap().write_all(b"q").unwrap();
output 没有stdin
方法问题不是出在你说的 标准库中的 Child 没有 Copy 特征 问题是你在使用 let output = o.wait_with_output().unwrap(); 这句话的时候,o这个Child的所有权已经转移了,所以你后面就不能用o这个变量了。
你可以直接返回output嘛