#process #future #opinionated #execution #management #compose #manage

巴哇哇

用于管理和组合过程执行的具有观点的工具集

6个版本

0.1.5 2019年8月22日
0.1.4 2019年7月9日

#1435 in 异步

每月22次下载

MIT/Apache

33KB
614

巴哇哇:项目管理

Crates.io

文档

用法

首先,将以下内容添加到您的 Cargo.toml

[dependencies]
bawawa = "0.1"

接下来,将以下内容添加到您的crate

extern crate bawawa;

许可证

此项目根据以下之一许可

任选其一。

贡献

除非您明确声明,否则您提交给 bawawa 的任何贡献,根据 Apache-2.0 许可证定义,应双许可如上所述,无需任何额外条款或条件。


lib.rs:

过程管理

此模块提供了对标准库的 std::process::Commandstd::process::Child 及相关类型的封装。

我们提供了一种具有观点的API,其中默认捕获标准输入和输出。错误也被封装以提供对失败原因的更好理解(特别是PID或命令行)。

在使用此API时有一些事项需要注意

  • 一旦 Process 被释放,相关的进程将被终止;
  • Process 捕获 StdoutStderr,如果您不读取标准输出,它将不会在您的终端上可见;
  • Process 也控制 Stdin
  • API使用了 Future 框架。如果您不将其推入运行时或调用 wait,函数将不会执行任何操作。

程序 Program

Program 是一个对象,它保证(在合理范围内)执行环境中存在一个程序。在构建时,会检查 Program,以确保一旦创建,就可以知道它是否存在以及它是否有适当的执行权限。

#
let rustc = Program::new("rustc".to_owned())?;

命令 Command

这是命令行,Program,以及启动新的 Process 所必需的参数和相关环境变量。

#
let mut get_rustc_version = Command::new(rustc);
get_rustc_version.arguments(&["--version"]);

println!("{}", get_rustc_version);

启动 Process

一旦 Command 准备好合适的参数,就可以 启动 一个 Process。trait Control 允许跟踪已启动的 Process 的生命周期。

#
let process = Process::spawn(get_rustc_version)?;

println!("spawned command: '{}' (PID: {})", process.command(), process.id());

我们提供了使用 StandardOutput::capture_stdoutStandardError::capture_stderr 捕获标准输出和标准错误输出,以及使用 StandardInput::send_stdin 向标准输入发送项的函数。

#

let mut capture_stdout = process
.capture_stdout(
// specify the codec, the way to decode data
// from the captured output. Here we read line
// by line.
tokio_codec::LinesCodec::new()
)
.wait(); // from the _futures_ crate's Stream trait

println!("compiler: {}", capture_stdout.next().unwrap()?);
// compiler: rustc 1.35.0 (3c235d560 2019-05-20)

依赖关系

~6.5MB
~122K SLoC