use std::ffi; use anyhow::Context; pub fn run_process(argv: &[S]) -> anyhow::Result<(Option, Option)> where S: AsRef, { let mut process = subprocess::Popen::create( argv, subprocess::PopenConfig { stdout: subprocess::Redirection::Pipe, ..Default::default() }, )?; let result = process .communicate(None) .context("Failed to communicate with subprocess"); if process .wait_timeout(std::time::Duration::from_secs(5)) .is_err() || process.exit_status().is_none() { process.terminate()?; } result }