stream_basic/
stream_basic.rs1use sandbox_rs::{SandboxBuilder, StreamChunk};
7use std::time::Duration;
8use tempfile::tempdir;
9
10fn main() -> sandbox_rs::Result<()> {
11 let tmp = tempdir().expect("Failed to create temp dir");
13
14 let mut sandbox = SandboxBuilder::new("stream-example")
16 .memory_limit_str("256M")?
17 .cpu_limit_percent(50)
18 .timeout(Duration::from_secs(30))
19 .root(tmp.path())
20 .build()?;
21
22 println!("Starting sandboxed process with streaming...\n");
23
24 let (result, stream) = sandbox.run_with_stream("/bin/echo", &["Hello from sandbox!"])?;
26
27 println!("Process output (streaming):");
28
29 for chunk in stream.into_iter() {
31 match chunk {
32 StreamChunk::Stdout(line) => {
33 println!("[STDOUT] {}", line);
34 }
35 StreamChunk::Stderr(line) => {
36 eprintln!("[STDERR] {}", line);
37 }
38 StreamChunk::Exit { exit_code, signal } => {
39 println!("\nProcess exited with code: {}", exit_code);
40 if let Some(sig) = signal {
41 println!("Killed by signal: {}", sig);
42 }
43 }
44 }
45 }
46
47 println!("\nExecution stats:");
48 println!(" Exit code: {}", result.exit_code);
49 println!(" Wall time: {} ms", result.wall_time_ms);
50 println!(" Memory peak: {} bytes", result.memory_peak);
51
52 Ok(())
53}