9 unstable releases
Uses new Rust 2024
| 0.5.3 | Jul 12, 2025 |
|---|---|
| 0.5.2 | Jul 7, 2025 |
| 0.5.1 | Jan 30, 2025 |
| 0.4.0 | Aug 7, 2023 |
| 0.1.0 | Mar 6, 2021 |
#41 in Asynchronous
546,211 downloads per month
Used in 18 crates
(17 directly)
42KB
895 lines
pty-process
This crate is a wrapper around tokio::process::Command or
std::process::Command which provides the ability to allocate a pty
and spawn new processes attached to that pty, with the pty as their
controlling terminal. This allows for manipulation of interactive
programs.
The basic functionality looks like this:
let mut pty = pty_process::Pty::new().unwrap();
pty.resize(pty_process::Size::new(24, 80)).unwrap();
let mut cmd = pty_process::Command::new("nethack");
let child = cmd.spawn(&pty.pts().unwrap()).unwrap();
The returned child is a normal instance of tokio::process::Child (or
std::process::Child for the blocking variant),
with its stdin/stdout/stderr file descriptors pointing at the given
pty. The pty instance implements tokio::io::AsyncRead and
tokio::io::AsyncWrite (or std::io::Read and std::io::Write for
the blocking variant), and can be used to communicate with the child
process. The child process will also be made a session leader of a new
session, and the controlling terminal of that session will be set to the
given pty.
Features
By default, only the blocking APIs are available. To
include the asynchronous APIs, you must enable the async feature.
Dependencies
~2–14MB
~166K SLoC