Я хотел бы сохранить std :: io :: process :: Процесс внутри структуры в ржавчине. Тем не менее, программа перестает функционировать, как только я передаю экземпляр процесса в структуру. Почему это? Код:Как сохранить процесс в ржавчине
use std::io::process::{Command, Process};
use std::rc::Rc;
use std::cell::RefCell;
struct DzenInst {
process: Rc<RefCell<Process>>
//stdin: std::io::pipe::PipeStream
}
impl DzenInst {
// Write a string to the stdin of dzen
fn write(&mut self, s : String) {
let mut stdin = self.process.borrow_mut().stdin.take().unwrap();
println!("Writing to dzen inst");
match stdin.write_str((s + "\n").as_slice()) {
Err(why) => panic!("couldn't write to dzen stdin: {}", why.desc),
Ok(_) => println!("Wrote string to dzen"),
};
}
}
fn CreateDzen() -> DzenInst {
DzenInst {process: Rc::new(RefCell::new(
match Command::new("dzen2").spawn() {
Err(why) => panic!("couldn't spawn dzen: {}", why.desc),
Ok(process) => process,
}))}
}
fn main() {
let mut d1 = CreateDzen();
d1.write("Test".to_string());
std::io::timer::sleep(std::time::duration::Duration::seconds(1));
}
Если я пишу в процессе стандартного ввода сразу внутри CreateDzen, то он работает нормально (т.е. программа не идет несуществующей). Я предполагаю, что копирование экземпляра Process вызывает вызов деструктора, который закрывает процесс. Любые идеи о том, как сохранить экземпляр Process, не приводя к исчезновению процесса?
Что именно это выход? Кажется правильным для меня, учитывая ваш точный код, но с 'dzen2' изменен на' cat', потому что у меня нет dzen2. –