File: std-exit-status.rs

package info (click to toggle)
rust-io-process 0.0.2%2Bds-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 280 kB
  • sloc: makefile: 2; sh: 1
file content (33 lines) | stat: -rw-r--r-- 835 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#![cfg(feature = "std")]

use io_process::{
    command::Command,
    coroutines::spawn_then_wait::{SpawnThenWait, SpawnThenWaitResult},
    runtimes::std::handle,
};
use tempfile::tempdir;

fn main() {
    env_logger::init();

    let workdir = tempdir().unwrap();

    let mut command = Command::new("touch");
    command.arg(workdir.path().join("file.tmp").to_string_lossy());

    println!("spawn: {command:#?}");
    println!();

    let mut arg = None;
    let mut spawn = SpawnThenWait::new(command);

    let status = loop {
        match spawn.resume(arg.take()) {
            SpawnThenWaitResult::Ok(output) => break output,
            SpawnThenWaitResult::Io(io) => arg = Some(handle(io).unwrap()),
            SpawnThenWaitResult::Err(err) => panic!("{err}"),
        }
    };

    println!("exit status: {status:#?}");
}