Rust命令行交互库rprompt的使用:轻量级终端输入提示与用户交互工具

Rust命令行交互库rprompt的使用:轻量级终端输入提示与用户交互工具

rprompt 是一个让在所有平台(包括Unix和Windows)上轻松实现命令行输入提示的Rust库。

使用方式

在Cargo.toml中添加依赖:

[dependencies]
rprompt = "2.2"

完整示例代码

首先展示内容中提供的示例:

[dependencies]
rprompt = "2.2"

下面是完整的示例demo:

use rprompt::prompt_reply_stdout;

fn main() {
    // 简单的输入提示
    let name = prompt_reply_stdout("请输入你的名字: ").unwrap();
    println!("你好, {}!", name);

    // 带默认值的输入提示
    let age = prompt_reply_stdout(&format!("请输入你的年龄 (默认18): ")).unwrap();
    let age: u32 = age.trim().parse().unwrap_or(18);
    println!("你的年龄是: {}", age);

    // 密码输入(不会回显)
    let password = rprompt::prompt_reply_password("请输入密码: ").unwrap();
    println!("你输入的密码长度: {}", password.len());
}

功能说明

  1. prompt_reply_stdout - 标准输入提示,会在终端显示用户输入
  2. prompt_reply_password - 密码输入,输入内容不会回显到终端
  3. 支持所有主要平台(Unix/Windows)
  4. 轻量级实现

许可证

源代码采用Apache 2.0许可证发布。

注意事项

  1. 输入处理会返回Result类型,实际使用时应处理可能的错误
  2. 对于数字等特定类型输入,需要额外进行类型转换
  3. 密码输入功能在不同平台上实现方式可能略有不同

1 回复

Rust命令行交互库rprompt使用指南

介绍

rprompt是一个轻量级的Rust库,专门用于在命令行应用程序中获取用户输入。它提供了简单直观的API,适合需要与用户进行基本交互的终端程序。

主要特性

  • 简单易用的API
  • 轻量级,无额外依赖
  • 支持输入提示文本
  • 基本的输入验证功能
  • 适合构建简单的CLI工具

使用方法

基本安装

Cargo.toml中添加依赖:

[dependencies]
rprompt = "0.5"

基本输入示例

use rprompt::prompt_reply;

fn main() -> std::io::Result<()> {
    let name = prompt_reply("请输入您的名字: ")?;
    println!("你好, {}!", name);
    Ok(())
}

带默认值的输入

use rprompt::prompt_reply_default;

fn main() -> std::io::Result<()> {
    let language = prompt_reply_default("您喜欢的编程语言: ", "Rust")?;
    println!("您选择了: {}", language);
    Ok(())
}

密码输入(隐藏输入)

use rprompt::prompt_reply_password;

fn main() -> std::io::Result<()> {
    let password = prompt_reply_password("请输入密码: ")?;
    println!("密码长度: {}", password.len());
    Ok(())
}

输入验证

use rprompt::prompt_reply_loop;

fn main() -> std::io::Result<()> {
    let age: u32 = prompt_reply_loop("请输入您的年龄: ", |input| {
        input.parse().map_err(|_| "请输入有效的数字".to_string())
    })?;
    
    println!("您的年龄是: {}", age);
    Ok(())
}

多行输入

use rprompt::prompt_reply_multiline;

fn main() -> std::io::Result<()> {
    println!("请输入多行内容,以空行结束:");
    let content = prompt_reply_multiline("> ")?;
    println!("您输入的内容:\n{}", content);
    Ok(())
}

高级用法

自定义输入处理器

use rprompt::prompt_reply_with;

fn main() -> std::io::Result<()> {
    let answer = prompt_reply_with("您喜欢Rust吗? (y/n) ", |input| {
        let lower = input.to_lowercase();
        if lower == "y" || lower == "n" {
            Ok(lower)
        } else {
            Err("请输入y或n".to_string())
        }
    })?;
    
    println!("您的回答: {}", answer);
    Ok(())
}

完整示例

下面是一个整合了多种rprompt功能的完整示例:

use rprompt::{prompt_reply, prompt_reply_default, prompt_reply_password, 
              prompt_reply_loop, prompt_reply_multiline, prompt_reply_with};

fn main() -> std::io::Result<()> {
    // 基本输入示例
    let name = prompt_reply("请输入您的名字: ")?;
    println!("你好, {}!", name);
    
    // 带默认值的输入
    let language = prompt_reply_default("您喜欢的编程语言: ", "Rust")?;
    println!("您选择了: {}", language);
    
    // 密码输入
    let password = prompt_reply_password("请输入密码: ")?;
    println!("密码长度: {}", password.len());
    
    // 输入验证
    let age: u32 = prompt_reply_loop("请输入您的年龄: ", |input| {
        input.parse().map_err(|_| "请输入有效的数字".to_string())
    })?;
    println!("您的年龄是: {}", age);
    
    // 多行输入
    println!("请输入多行内容,以空行结束:");
    let content = prompt_reply_multiline("> ")?;
    println!("您输入的内容:\n{}", content);
    
    // 自定义输入处理器
    let answer = prompt_reply_with("您喜欢Rust吗? (y/n) ", |input| {
        let lower = input.to_lowercase();
        if lower == "y" || lower == "n" {
            Ok(lower)
        } else {
            Err("请输入y或n".to_string())
        }
    })?;
    println!("您的回答: {}", answer);
    
    Ok(())
}

注意事项

  1. rprompt适合简单的CLI交互,对于更复杂的终端UI需求,可以考虑使用更强大的库如dialoguer或crossterm
  2. 在Windows系统上,某些功能可能表现略有不同
  3. 对于生产环境应用,建议添加适当的错误处理和输入验证

rprompt以其简洁性在小型Rust CLI工具中非常受欢迎,是快速实现用户交互的理想选择。

回到顶部