6个稳定版本
使用旧的Rust 2015
1.2.5 | 2018年10月23日 |
---|---|
1.2.4 | 2017年10月23日 |
1.2.1 | 2017年10月3日 |
1.0.1 | 2017年6月12日 |
1.0.0 | 2017年5月4日 |
#497 in Unix API
用于 exclave
35KB
758 行
Runny:进程运行器
Runny是一个Rust crate,它允许在它们的会话中轻松运行进程。您可以读取()和写入()结果运行进程,以及终止它(及其所有子进程)。
在Unix上,子进程将在其自己的pty中运行,因此它将是不缓存的。
在Windows上,系统首先发送WM_QUIT消息,这与SIGTERM的行为非常相似。如果进程没有退出,则使用TerminateProcess()作为SIGKILL的类似物。
概要
将其添加到您的Cargo.toml中
runny = "*"
然后在您的代码中创建一个Runny对象并启动子进程
let running = Runny::new("/bin/bash -c 'echo Hi there, here are some numbers:; seq 1 5;'").start().unwrap();
let exit_code = running.result();
println!("Result of command: {}", exit_code);
您还可以从输出读取并写入输入。请注意,stdout和stderr合并为“输出”
let mut running = Runny::new("/bin/bash -c 'echo Input:; read foo; echo Got string: \
-$foo-; sleep 1; echo End'")
.start()
.unwrap();
let mut input = running.take_input();
let mut output = running.take_output();
writeln!(input, "bar").unwrap();
let mut result = String::new();
output.read_to_string(&mut result).unwrap();
running.terminate(None).unwrap();
assert_eq!(result, "Input:\nGot string: -bar-\nEnd\n");
Runny命令支持设置变量,例如Timeout。如果设置了超时,则程序将在超时到期时退出,如果它尚未退出
let timeout_secs = 3;
let start_time = Instant::now();
let mut running = Runny::new("/bin/bash -c 'echo -n Hi there; sleep 1000; echo -n Bye there'")
.timeout(Duration::from_secs(timeout_secs))
.start()
.unwrap();
let mut s = String::new();
running.read_to_string(&mut s).unwrap();
let end_time = Instant::now();
// Give one extra second for timeout, to account for plumbing.
assert!(end_time.duration_since(start_time) < Duration::from_secs(timeout_secs + 1));
assert!(end_time.duration_since(start_time) > Duration::from_secs(timeout_secs - 1));
assert_eq!(s, "Hi there");
依赖项
~2MB
~40K SLoC