From 18e6b974c03284c2d7959394d3f5e76f1c314e64 Mon Sep 17 00:00:00 2001 From: Developer Date: Tue, 7 Apr 2026 12:17:09 -0700 Subject: [PATCH] Fix sidecar stdout buffering: set PYTHONUNBUFFERED=1 PyInstaller frozen executables buffer stdout when piped to a subprocess (no TTY). Even with flush=True in Python, the OS-level pipe buffer can delay output. This prevented the ready event from reaching the Tauri app, causing the "Starting sidecar..." hang. Fix: set PYTHONUNBUFFERED=1 env var on both prod and dev sidecar commands, plus -u flag for dev mode Python. Co-Authored-By: Claude Opus 4.6 (1M context) --- src-tauri/src/sidecar/mod.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src-tauri/src/sidecar/mod.rs b/src-tauri/src/sidecar/mod.rs index 1165704..0630498 100644 --- a/src-tauri/src/sidecar/mod.rs +++ b/src-tauri/src/sidecar/mod.rs @@ -555,7 +555,7 @@ impl SidecarManager { fn build_dev_command(&self) -> Result { let mut cmd = std::process::Command::new("python"); - cmd.args(["-m", "backend.main_headless"]); + cmd.args(["-u", "-m", "backend.main_headless"]); // -u = unbuffered // Try to find the project root (parent of src-tauri) if let Some(dirs) = DIRS.get() { @@ -568,6 +568,7 @@ impl SidecarManager { } } + cmd.env("PYTHONUNBUFFERED", "1"); Ok(cmd) } @@ -583,6 +584,9 @@ impl SidecarManager { bin.parent() .ok_or("Cannot determine sidecar parent dir")?, ); + // Force unbuffered stdout so the ready event is sent immediately. + // PyInstaller frozen executables buffer stdout when piped. + cmd.env("PYTHONUNBUFFERED", "1"); Ok(cmd) }