diff options
Diffstat (limited to 'src/lib.rs')
-rw-r--r-- | src/lib.rs | 47 |
1 files changed, 47 insertions, 0 deletions
@@ -1,3 +1,50 @@ +//! This crate adds a helper method to +//! [`std::process::Command`](::std::process::Command) (and optionally its +//! equivalent in various async frameworks) to allocate a pty to spawn the +//! process into. This allows for manipulation of interactive programs. +//! +//! The basic functionality is provided by the [`Command`](Command) trait in +//! this crate: +//! +//! ```no_run +//! use pty_process::Command as _; +//! +//! let mut cmd = std::process::Command::new("nethack"); +//! let child = cmd.spawn_pty(Some(&pty_process::Size::new(24, 80))).unwrap(); +//! ``` +//! +//! The `child` instance returned by the call to +//! [`spawn_pty`](Command::spawn_pty) is a thin wrapper around the `Child` +//! struct associated with the `Command` module used. You can use it +//! identically to how you would use the normal +//! [`std::process::Child`](::std::process::Child) instance, but it also +//! provides additional methods for interacting with the pty: +//! +//! ```no_run +//! # use pty_process::Command as _; +//! # +//! # let mut cmd = std::process::Command::new("nethack"); +//! # let mut child = cmd +//! # .spawn_pty(Some(&pty_process::Size::new(24, 80))).unwrap(); +//! use std::io::Write as _; +//! +//! child.pty().write_all(b"foo\n").unwrap(); +//! child.resize_pty(&pty_process::Size::new(30, 100)).unwrap(); +//! let status = child.wait().unwrap(); +//! ``` +//! +//! The available implementations are gated by features: +//! * `backend-std`: Add an implementation for +//! [`std::process::Command`](::std::process::Command). Enabled by default. +//! * `backend-smol`: Add an implementation for +//! [`smol::process::Command`](::smol::process::Command). +//! * `backend-async-std`: Add an implementation for +//! [`async_std::process::Command`](::async_std::process::Command). +//! * `backend-tokio`: Add an implementation for +//! [`tokio::process::Command`](::tokio::process::Command). +//! +//! Any number of backends may be enabled, depending on your needs. + mod command; pub use command::{Child, Command}; mod error; |