sbprocess

Sbprocess Fixed May 2026

use std::process::Command; let output = Command::new("sh") .arg("-c") .arg("echo hello | grep h") .output() .expect("failed to execute");

// Run with environment cmd("python script.py") .env("DEBUG", "1") .current_dir("/app") .run()?; sbprocess

// Capture both stdout and stderr separately let res = cmd("ls /nonexistent").run_unchecked(); println!("err: {}", res.stderr); use sbprocess::pipe; let result = pipe!("echo 'hello world'" | "wc -w").run().unwrap(); assert_eq!(result.stdout.trim(), "2"); With Timeout use sbprocess::cmd; use std::time::Duration; match cmd("sleep 10").timeout(Duration::from_secs(1)).run() { Ok(_) => println!("Finished"), Err(e) => println!("Timed out: {}", e), } Why Not Just Use std::process ? | Feature | std::process | sbprocess | |----------------------|--------------|------------| | String command | ❌ | ✅ | | Auto error messages | ❌ | ✅ | | Piping sugar | ❌ | ✅ | | Timeout | ❌ (manual) | ✅ | | Capture as String | ❌ (Vec ) | ✅ | Installation Add to your Cargo.toml : use std::process::Command; let output = Command::new("sh")

sbprocess – A Minimal, Safe Wrapper Around Subprocesses (No Boilerplate) rust programming cli devtools subprocess The Problem We've

That’s a lot of .arg() calls, and error handling? You're on your own.

rust programming cli devtools subprocess The Problem We've all been there. You just need to run a shell command, capture its output, handle errors gracefully, and maybe pipe a few things together. But the standard library's std::process::Command quickly becomes verbose:

[dependencies] sbprocess = "0.1.0" // Run and capture let out = cmd("git status --porcelain").run()?.stdout; // Run ignoring failure let _ = cmd("rm -f tmp.txt").run_ignored();

loading.gif

Texts that will be displayed have been partly translated by an automatic translation system.

To view any text in its original language (English), leave the mouse pointer on this text (or touch the text if you use a tablet).