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());
}
功能说明
prompt_reply_stdout
- 标准输入提示,会在终端显示用户输入prompt_reply_password
- 密码输入,输入内容不会回显到终端- 支持所有主要平台(Unix/Windows)
- 轻量级实现
许可证
源代码采用Apache 2.0许可证发布。
注意事项
- 输入处理会返回Result类型,实际使用时应处理可能的错误
- 对于数字等特定类型输入,需要额外进行类型转换
- 密码输入功能在不同平台上实现方式可能略有不同
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(())
}
注意事项
- rprompt适合简单的CLI交互,对于更复杂的终端UI需求,可以考虑使用更强大的库如dialoguer或crossterm
- 在Windows系统上,某些功能可能表现略有不同
- 对于生产环境应用,建议添加适当的错误处理和输入验证
rprompt以其简洁性在小型Rust CLI工具中非常受欢迎,是快速实现用户交互的理想选择。