[英]Tauri: write to child std in inside window callback event
我是 rust 的新手,并且在使用tauri 框架将窗口上的事件结果写入生成的进程的 std 时遇到了一些麻烦。
我能够在窗口事件的回调之外写入进程/边车的标准输入,但它在回调内不起作用。 就好像命令丢失了/不起作用。
我正在接收事件,正如 println 语句所确认的那样。
我的代码如下:
pub fn window_manager(win: Window<Wry>) {
let (mut rx, mut child) = Command::new_sidecar("window_manager")
.expect("failed to create `window_manager`")
.spawn()
.expect("Failed to spawn sidecar");
let child = Arc::new(Mutex::new(child));
child.lock().unwrap().write(b"********").unwrap(); // This writes to std in here...
win.listen("event-name", move |event| {
// let child = Arc::new(Mutex::new(child));
// child.lock().unwrap().write(b"********").unwrap(); // This does not write to std in here...
println!("WINDOW EVENT RECEIVED {:?}", event.payload());
});
tauri::async_runtime::spawn(async move {
while let Some(event) = rx.recv().await {
if let CommandEvent::Stdout(line) = event {
println!("STDOUT from sidecar....: {}", line);
}
}
});
}
谢谢你的帮助。
所以我想出了代码有什么问题。 我忘记了/没有意识到我需要在 stdin 输入中写入的字节末尾添加一个新行字符,因此它从未注册过输入。 以下代码有效。
pub fn window_manager(win: Window<Wry>) {
let (mut rx, mut child) = Command::new_sidecar("window_manager")
.expect("failed to create `window_manager`")
.spawn()
.expect("Failed to spawn sidecar");
let child = Arc::new(Mutex::new(child));
main_window.listen("event-name", move |event| {
child
.lock()
.unwrap()
.write("oh my lol \n".as_bytes())
.unwrap(); // This does write to std in here...
println!("WINDOW EVENT RECEIVED {:?}", event.payload());
});
tauri::async_runtime::spawn(async move {
while let Some(event) = rx.recv().await {
if let CommandEvent::Stdout(line) = event {
println!("STDOUT from sidecar....: {}", line);
}
}
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.