#终端 #pty #子进程 #进程 #conpty #命令行工具 #异步IO

伪终端

一个具有异步支持的跨平台伪终端实现

2个版本

0.1.1 2023年9月2日
0.1.0 2023年9月1日

#933 in 异步

MIT许可证

17KB
342

伪终端

《code>pseudoterminal》库是一个多功能的伪终端(PTY)实现,专为Rust设计,提供异步功能。这个库提供了一种简单高效的方式与子进程通过伪终端进行交互。无论您是构建交互式命令行应用程序、自定义终端还是自动化终端交互,`pseudoterminal`都是您的可靠伴侣。

主要功能

  • 跨平台兼容性:在Windows和基于Unix的系统上无缝运行,确保您的项目具有广泛的兼容性。
  • 异步支持:通过使用Tokio等库,轻松集成异步编程范式,提高您的应用程序效率。
  • 终端尺寸操作:提供获取和修改终端尺寸的方法,允许动态调整终端布局。

入门指南

安装

要将《code>pseudoterminal》库包含到您的Rust项目中,只需将其作为依赖项添加到您的《code>Cargo.toml

[dependencies]
pseudoterminal = "0.1.0"

示例

以下是一个基本示例,说明如何使用《code>pseudoterminal》库启动终端进程并与之进行交互

use pseudoterminal::CommandExt;
use std::io::{stdin, stdout, Read, Write};
use std::process::Command;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Create a new pseudoterminal
    let mut cmd = Command::new("bash"); // Replace with your desired command
    let mut terminal = cmd.spawn_terminal()?;

    // Read from and write to the terminal
    let mut input_buffer = String::new();
    let mut output_buffer = [0u8; 1024];

    loop {
        // Read from user input or other sources
        stdin().read_line(&mut input_buffer)?;

        // Write input to the terminal
        terminal
            .termin
            .as_mut()
            .unwrap()
            .write_all(input_buffer.as_bytes())?;

        // Read output from the terminal
        let bytes_read = terminal
            .termout
            .as_mut()
            .unwrap()
            .read(&mut output_buffer)?;

        // Write read bytes to stdout
        stdout().write_all(&output_buffer[..bytes_read])?;
        stdout().flush()?;

        // Clear the input buffer
        input_buffer.clear();
    }
}

此示例展示了如何使用《code>pseudoterminal》启动终端进程,向其发送输入并接收其输出。您可以轻松地将《code>"bash"替换为任何其他您希望执行的命令。

文档

有关完整文档,包括深入的API参考和实际使用示例,请参阅官方文档https://docs.rs/pseudoterminal

许可证

本库遵循宽松的MIT许可证。有关更多详情,请参阅[LICENSE]文件。

依赖项

~2–44MB
~636K SLoC