Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Крейт 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?);
}
}

Модули

МодульОписание
unixUnix-специфичные расширения

Структуры

СтруктураОписание
ChildПорождённый дочерний процесс
ChildStderrДескриптор стандартного ошибочного вывода (stderr) дочернего процесса
ChildStdinДескриптор стандартного ввода (stdin) дочернего процесса
ChildStdoutДескриптор стандартного вывода (stdout) дочернего процесса
CommandПостроитель для порождения процессов
ExitStatusОписывает результат процесса после его завершения
OutputВывод завершенного процесса
StdioОписывает, что делать со стандартным I/O потоком для дочернего процесса при передаче в методы stdin, stdout и stderr команды Command

Функции

ФункцияОписание
driverЗапускает драйвер для асинхронных процессов