19个稳定版本

2.2.4 2024年8月10日
2.2.3 2024年6月1日
2.2.2 2024年4月20日
2.2.0 2024年3月30日
0.1.0 2019年5月23日

#21 in 异步

Download history 278815/week @ 2024-05-03 313086/week @ 2024-05-10 311042/week @ 2024-05-17 317891/week @ 2024-05-24 329625/week @ 2024-05-31 341228/week @ 2024-06-07 342886/week @ 2024-06-14 349718/week @ 2024-06-21 331892/week @ 2024-06-28 332352/week @ 2024-07-05 357896/week @ 2024-07-12 379312/week @ 2024-07-19 370319/week @ 2024-07-26 368981/week @ 2024-08-02 412860/week @ 2024-08-09 407225/week @ 2024-08-16

1,633,382 每月下载量
用于 1,711 个crate(56 个直接使用)

Apache-2.0 OR MIT

67KB
1K SLoC

async-process

Build License Cargo Documentation

异步处理进程的接口。

此crate是std::process的异步版本。

实现

首次使用时,会懒加载一个名为"async-process"的后台线程,等待启动的子进程退出,然后调用wait()系统调用以清理"僵尸"进程。这与标准库中的process API不同,其中释放正在运行的Child会导致其资源泄漏。

此crate在类Unix系统上使用async-io进行异步I/O,在Windows上使用blocking进行异步I/O。

示例

启动进程并收集其输出

use async_process::Command;

let out = Command::new("echo").arg("hello").arg("world").output().await?;
assert_eq!(out.stdout, b"hello world\n");

逐行读取输出,直到生成

use async_process::{Command, Stdio};
use futures_lite::{io::BufReader, prelude::*};

let mut child = Command::new("find")
    .arg(".")
    .stdout(Stdio::piped())
    .spawn()?;

let mut lines = BufReader::new(child.stdout.take().unwrap()).lines();

while let Some(line) = lines.next().await {
    println!("{}", line?);
}

许可证

根据您的选择,受以下任一许可证的约束:

贡献

除非您明确声明,否则根据Apache-2.0许可证定义,您有意提交的工作应作为以下双重许可证,不附加任何额外条款或条件。

依赖

~3–13MB
~164K SLoC