在 Tauri 项目中运行时从可执行文件实时发出日志消息

Emit log messages in real-time from executable while running in Tauri project

提问人:ajnobre 提问时间:6/28/2023 最后编辑:Jmbajnobre 更新时间:6/28/2023 访问量:147

问:

我正在处理一个 Tauri 项目,其中我有一个名为 run_executable 的命令,用于执行外部可执行文件。我想使用 Tauri 的事件系统将日志消息从可执行文件实时发送到前端。但是,目前,只有在可执行文件完成运行后才会发出日志消息。

这是我的代码的简化版本:

 #[tauri::command(async)]
 pub async fn run_executable(window: Window) {
     let mut cmd = Command::new("../executables/pwdemo");
     cmd.stdout(Stdio::piped());

     let mut child = cmd.spawn().expect("Failed to execute command");
     let stdout = child.stdout.take().expect("Failed to capture stdout");
     let reader = BufReader::new(stdout);

     tokio::spawn(async move {
         let lines = reader.lines();
         for line in lines {
             window.emit("logMessage", Some(line.expect("Failed to read line")))
                   .expect("Failed to emit event");
         }
     });

     let _ = child.wait().expect("Failed to wait for child process");
 }

我希望日志消息在可执行文件可用后立即实时发出,而不是等待可执行文件完成运行。

我使用了 AI 生成的代码,但我仍然无法实现我需要的东西。在此示例中,我认为当可执行文件生成更多输出日志消息时,它不会更新。reader.lines()

关于如何实现这一目标的任何建议或示例将不胜感激。提前感谢您的帮助!

多线程 事件 rust async-await tauri

评论


答: 暂无答案