10 releases (5 breaking)
0.6.0 | Sep 24, 2022 |
---|---|
0.5.2 | Jun 8, 2022 |
0.4.0 | May 12, 2022 |
0.3.0 | Mar 26, 2022 |
0.1.3 | Jul 30, 2021 |
#76 in Testing
1,724 downloads per month
Used in 11 crates
190KB
4K
SLoC
expectrl
Expectrl is a tool for automating terminal applications.
Expectrl is a rust module for spawning child applications and controlling them and responding to expected patterns in process's output. Expectrl works like Don Libes' Expect. Expectrl allows your script to spawn a child application and control it as if a human were typing commands.
Using the library you can:
- Spawn process
- Control process
- Interact with process's IO(input/output).
expectrl
like original expect
may shine when you're working with interactive applications.
If your application is not interactive you may not find the library the best choise.
Usage
A general example where the program simulates a used interacting with ftp
.
use expectrl::{spawn, Regex, Eof, WaitStatus, 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)?;
assert_eq!(p.wait()?, WaitStatus::Exited(p.pid(), 0));
}
The example inspired by the one in philippkeller/rexpect.
For more examples, check the examples directory.
Features
- It has an
async
support (To enable them you must turn on anasync
feature). - It supports logging.
- It supports interact function.
- It works on windows.
Notes
It was originally inspired by philippkeller/rexpect and pexpect.
Licensed under MIT License
Dependencies
~0.9–32MB
~551K SLoC