繁体   English   中英

Tauri:在内部窗口回调事件中写入 child std

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM