Crates.io | execute |
lib.rs | execute |
version | 0.2.13 |
source | src |
created_at | 2020-06-08 03:50:40.583261 |
updated_at | 2023-11-20 14:17:08.68769 |
description | A library for extending `Command` in order to execute programs more easily. |
homepage | https://magiclen.org/execute |
repository | https://github.com/magiclen/execute |
max_upload_size | |
id | 251202 |
size | 34,430 |
This library is used for extending Command
in order to execute programs more easily.
use std::process::Command;
use execute::Execute;
// ...
Since Command
is used for spawning a process of a command and the executed progrom is external which may not exist or may not be the program that we expected, we usually need to verify the external program at runtime.
The execute_check_exit_status_code
method can be used to execute a command and check its exit status. For example,
use std::process::Command;
use execute::Execute;
const FFMPEG_PATH: &str = "/path/to/ffmpeg";
let mut first_command = Command::new(FFMPEG_PATH);
first_command.arg("-version");
if first_command.execute_check_exit_status_code(0).is_err() {
eprintln!("The path `{}` is not a correct FFmpeg executable binary file.", FFMPEG_PATH);
}
use std::process::Command;
use execute::Execute;
const FFMPEG_PATH: &str = "/path/to/ffmpeg";
let mut command = Command::new(FFMPEG_PATH);
command.arg("-i");
command.arg("/path/to/media-file");
command.arg("/path/to/output-file");
if let Some(exit_code) = command.execute().unwrap() {
if exit_code == 0 {
println!("Ok.");
} else {
eprintln!("Failed.");
}
} else {
eprintln!("Interrupted!");
}
use std::process::Command;
use execute::Execute;
const FFMPEG_PATH: &str = "/path/to/ffmpeg";
let mut command = Command::new(FFMPEG_PATH);
command.arg("-i");
command.arg("/path/to/media-file");
command.arg("/path/to/output-file");
let output = command.execute_output().unwrap();
if let Some(exit_code) = output.status.code() {
if exit_code == 0 {
println!("Ok.");
} else {
eprintln!("Failed.");
}
} else {
eprintln!("Interrupted!");
}
use std::process::{Command, Stdio};
use execute::Execute;
const FFMPEG_PATH: &str = "/path/to/ffmpeg";
let mut command = Command::new(FFMPEG_PATH);
command.arg("-i");
command.arg("/path/to/media-file");
command.arg("/path/to/output-file");
command.stdout(Stdio::piped());
command.stderr(Stdio::piped());
let output = command.execute_output().unwrap();
if let Some(exit_code) = output.status.code() {
if exit_code == 0 {
println!("Ok.");
} else {
eprintln!("Failed.");
}
} else {
eprintln!("Interrupted!");
}
println!("{}", String::from_utf8(output.stdout).unwrap());
println!("{}", String::from_utf8(output.stderr).unwrap());
use std::process::{Command, Stdio};
use execute::Execute;
let mut bc_command = Command::new("bc");
bc_command.stdout(Stdio::piped());
let output = bc_command.execute_input_output("2^99\n").unwrap();
println!("Answer: {}", String::from_utf8(output.stdout).unwrap().trim_end());
use std::process::{Command, Stdio};
use std::fs::File;
use execute::Execute;
let mut cat_command = Command::new("cat");
cat_command.stdout(Stdio::piped());
let mut file = File::open("Cargo.toml").unwrap();
let output = cat_command.execute_input_reader_output(&mut file).unwrap();
println!("{}", String::from_utf8(output.stdout).unwrap());
By default, the buffer size is 256 bytes. If you want to change that, you can use the _reader_output2
or _reader2
methods and define a length explicitly.
For example, to change the buffer size to 4096 bytes,
use std::process::{Command, Stdio};
use std::fs::File;
use execute::generic_array::typenum::U4096;
use execute::Execute;
let mut cat_command = Command::new("cat");
cat_command.stdout(Stdio::piped());
let mut file = File::open("Cargo.toml").unwrap();
let output = cat_command.execute_input_reader_output2::<U4096>(&mut file).unwrap();
println!("{}", String::from_utf8(output.stdout).unwrap());
use std::process::{Command, Stdio};
use execute::Execute;
let mut command1 = Command::new("echo");
command1.arg("HELLO WORLD");
let mut command2 = Command::new("cut");
command2.arg("-d").arg(" ").arg("-f").arg("1");
let mut command3 = Command::new("tr");
command3.arg("A-Z").arg("a-z");
command3.stdout(Stdio::piped());
let output = command1.execute_multiple_output(&mut [&mut command2, &mut command3]).unwrap();
assert_eq!(b"hello\n", output.stdout.as_slice());
The shell
function can be used to create a Command
instance with a single command string instead of a program name and scattered arguments.
use std::process::{Command, Stdio};
use execute::{Execute, shell};
let mut command = shell("cat /proc/meminfo");
command.stdout(Stdio::piped());
let output = command.execute_output().unwrap();
println!("{}", String::from_utf8(output.stdout).unwrap());
The command
function can be used to create a Command
instance with a single command string instead of a program name and scattered arguments. The difference between the shell
function and the command
function is that the former is interpreted by the current shell while the latter is parsed by this crate.
use std::process::{Command, Stdio};
use execute::{Execute, command};
let mut command = command("cat '/proc/meminfo'");
command.stdout(Stdio::piped());
let output = command.execute_output().unwrap();
println!("{}", String::from_utf8(output.stdout).unwrap());
The command!
macro can be used to create a Command
instance with a single command string literal instead of a program name and scattered arguments.
use std::process::{Command, Stdio};
use execute::Execute;
let mut command = execute::command!("cat '/proc/meminfo'");
command.stdout(Stdio::piped());
let output = command.execute_output().unwrap();
println!("{}", String::from_utf8(output.stdout).unwrap());
Command
Instance by Providing Arguments SeparatelyThe command_args!
macro can be used to create a Command
instance with a program name and arguments separately. The program name and arguments can be non-literal.
use std::process::{Command, Stdio};
use execute::Execute;
let mut command = execute::command_args!("cat", "/proc/meminfo");
command.stdout(Stdio::piped());
let output = command.execute_output().unwrap();
println!("{}", String::from_utf8(output.stdout).unwrap());
https://crates.io/crates/execute