forked from Cutieguwu/raven
Initial Commit.
This commit is contained in:
30
src/io.rs
Normal file
30
src/io.rs
Normal file
@@ -0,0 +1,30 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user