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 异步
1,633,382 每月下载量
用于 1,711 个crate(56 个直接使用)
67KB
1K SLoC
async-process
异步处理进程的接口。
此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 License,版本2.0 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义,您有意提交的工作应作为以下双重许可证,不附加任何额外条款或条件。
依赖
~3–13MB
~164K SLoC