Крейт process
Источник: Документация async-process
Асинхронный интерфейс для работы с процессами.
Этот крейт представляет собой асинхронную версию std::process.
Реализация
Фоновый поток с именем "async-process" лениво создается при первом использовании, который ожидает завершения порожденных дочерних процессов и затем вызывает системный вызов wait() для очистки процессов-«зомби». Это отличается от API процессов в стандартной библиотеке, где удаление работающего Child приводит к утечке его ресурсов.
Этот крейт использует async-io для асинхронного I/O в Unix-подобных системах и blocking для асинхронного I/O в Windows.
Примеры
Запуск процесса и сбор его вывода:
#![allow(unused)] fn main() { use async_process::Command; let out = Command::new("echo").arg("hello").arg("world").output().await?; assert_eq!(out.stdout, b"hello world\n"); }
Чтение вывода построчно по мере его создания:
#![allow(unused)] fn main() { 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?); } }
Модули
| Модуль | Описание |
|---|---|
unix | Unix-специфичные расширения |
Структуры
| Структура | Описание |
|---|---|
Child | Порождённый дочерний процесс |
ChildStderr | Дескриптор стандартного ошибочного вывода (stderr) дочернего процесса |
ChildStdin | Дескриптор стандартного ввода (stdin) дочернего процесса |
ChildStdout | Дескриптор стандартного вывода (stdout) дочернего процесса |
Command | Построитель для порождения процессов |
ExitStatus | Описывает результат процесса после его завершения |
Output | Вывод завершенного процесса |
Stdio | Описывает, что делать со стандартным I/O потоком для дочернего процесса при передаче в методы stdin, stdout и stderr команды Command |
Функции
| Функция | Описание |
|---|---|
driver | Запускает драйвер для асинхронных процессов |