12个版本 (6个重大更改)
0.7.1 | 2023年7月3日 |
---|---|
0.7.0 | 2023年3月30日 |
0.6.0 | 2022年9月24日 |
0.5.2 | 2022年6月8日 |
0.1.3 | 2021年7月30日 |
#52 in 测试
每月4,054次下载
在 13 crates 中使用
190KB
4K SLoC
expectrl
Expectrl是一个自动化终端应用程序的工具。
Expectrl是一个用于启动子应用程序并控制它们以及响应进程输出的预期模式的Rust模块。Expectrl的工作方式类似于Don Libes的Expect。Expectrl允许您的脚本启动子应用程序并像人类输入命令一样控制它。
使用此库,您可以
- 启动进程
- 控制进程
- 与进程的I/O(输入/输出)交互。
expectrl
类似于原始的expect
,在处理交互式应用程序时可能会很出色。如果您的应用程序不是交互式的,您可能不会认为这个库是最好的选择。
用法
将expectrl
添加到您的Cargo.toml文件中。
# Cargo.toml
[dependencies]
expectrl = "0.7"
一个示例,其中程序模拟用户与ftp
交互。
use expectrl::{spawn, Regex, Eof, Error};
fn main() -> Result<(), Error> {
let mut p = spawn("ftp speedtest.tele2.net")?;
p.expect(Regex("Name \\(.*\\):"))?;
p.send_line("anonymous")?;
p.expect("Password")?;
p.send_line("test")?;
p.expect("ftp>")?;
p.send_line("cd upload")?;
p.expect("successfully changed.\r\nftp>")?;
p.send_line("pwd")?;
p.expect(Regex("[0-9]+ \"/upload\""))?;
p.send_line("exit")?;
p.expect(Eof)?;
Ok(())
}
相同的示例,但密码将从stdin读取。
use std::io::stdout;
use expectrl::{
interact::{actions::lookup::Lookup, InteractOptions},
spawn, stream::stdin::Stdin,
ControlCode, Error, Regex,
};
fn main() -> Result<(), Error> {
let mut auth = false;
let mut login_lookup = Lookup::new();
let opts = InteractOptions::new(&mut auth).on_output(|ctx| {
if login_lookup
.on(ctx.buf, ctx.eof, "Login successful")?
.is_some()
{
**ctx.state = true;
return Ok(true);
}
Ok(false)
});
let mut p = spawn("ftp bks4-speedtest-1.tele2.net")?;
let mut stdin = Stdin::open()?;
p.interact(&mut stdin, stdout()).spawn(opts)?;
stdin.close()?;
if !auth {
println!("An authefication was not passed");
return Ok(());
}
p.expect("ftp>")?;
p.send_line("cd upload")?;
p.expect("successfully changed.")?;
p.send_line("pwd")?;
p.expect(Regex("[0-9]+ \"/upload\""))?;
p.send(ControlCode::EndOfTransmission)?;
p.expect("Goodbye.")?;
Ok(())
}
有关更多示例,请查看示例目录。
特性
- 它支持异步(要启用它们,您必须打开异步功能)。
- 它支持日志记录。
- 它支持交互功能。
- 它在Windows上运行。
注意
它最初受到philippkeller/rexpect和pexpect的启发。
在MIT许可证下许可
依赖项
~4–36MB
~501K SLoC