forked from Cutieguwu/raven
31 lines
659 B
Rust
31 lines
659 B
Rust
use std::ffi;
|
|
|
|
use anyhow::Context;
|
|
|
|
pub fn run_process<S>(argv: &[S]) -> anyhow::Result<(Option<String>, Option<String>)>
|
|
where
|
|
S: AsRef<ffi::OsStr>,
|
|
{
|
|
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
|
|
}
|