14 releases

0.5.0 Sep 12, 2025
0.4.1 Mar 6, 2023
0.3.0 Dec 11, 2021
0.2.0 Oct 7, 2021
0.1.9 Jul 28, 2021

#325 in Command-line interface

Download history 6744/week @ 2025-10-01 5648/week @ 2025-10-08 5736/week @ 2025-10-15 6384/week @ 2025-10-22 6664/week @ 2025-10-29 4977/week @ 2025-11-05 3504/week @ 2025-11-12 5668/week @ 2025-11-19 3804/week @ 2025-11-26 3281/week @ 2025-12-03 3429/week @ 2025-12-10 3442/week @ 2025-12-17 2521/week @ 2025-12-24 4004/week @ 2025-12-31 4187/week @ 2026-01-07 4217/week @ 2026-01-14

15,406 downloads per month
Used in 30 crates (4 directly)

MIT license

33KB
584 lines

ptyprocess Build codecov Crate docs.rs license

A library provides an interface for a unix PTY/TTY.

It aims to work on all major Unix variants.

The library was developed as a backend for a https://github.com/zhiburt/expectrl. If you're interested in a high level operations may you'd better take a look at zhiburt/expectrl.

Usage

use std::io::{BufRead, BufReader, Result, Write};
use std::process::Command;

use ptyprocess::PtyProcess;

fn main() -> Result<()> {
    // spawn a cat process
    let mut process = PtyProcess::spawn(Command::new("cat"))?;

    // create a communication stream
    let mut stream = process.get_raw_handle()?;

    // send a message to process
    writeln!(stream, "Hello World!")?;

    // read a line from the stream
    let mut reader = BufReader::new(stream);
    let mut buf = String::new();
    reader.read_line(&mut buf)?;

    println!("line was entered {buf:?}");

    // stop the process
    assert!(process.exit(true)?);

    Ok(())
}

Features

  • close-range - optimization for faster PtyProcess::spawn (available on FreeBSD and on Linux since 5.9 and glibc 2.34)

Dependencies

~2MB
~38K SLoC