Expand description

A tool for automating terminal applications on alike original expect.

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.

Feature flags

  • async: Enables a async/await public API.

By default we generate documentation for interface with no features on. You can generate documentation for other features localy using this command.

cargo doc --features async --open
RUSTDOCFLAGS='--cfg docsrs' cargo +nightly doc --features async --open

Examples

An example for interacting via ftp.

use expectrl::{spawn, Regex, Eof, WaitStatus};

let mut p = spawn("ftp speedtest.tele2.net").unwrap();
p.expect(Regex("Name \\(.*\\):")).unwrap();
p.send_line("anonymous").unwrap();
p.expect("Password").unwrap();
p.send_line("test").unwrap();
p.expect("ftp>").unwrap();
p.send_line("cd upload").unwrap();
p.expect("successfully changed.\r\nftp>").unwrap();
p.send_line("pwd").unwrap();
p.expect(Regex("[0-9]+ \"/upload\"")).unwrap();
p.send_line("exit").unwrap();
p.expect(Eof).unwrap();
assert_eq!(p.wait().unwrap(), WaitStatus::Exited(p.pid(), 0));

The example inspired by the one in [philippkeller/rexpect].

An example when Command is used.

use std::{process::Command, io::prelude::*};
use expectrl::Session;

let mut echo_hello = Command::new("sh");
echo_hello.arg("-c").arg("echo hello");

let mut p = Session::spawn(echo_hello).unwrap();
p.expect("hello").unwrap();

An example of logging.

use std::io::{stdout, prelude::*};
use expectrl::spawn;

let mut sh = spawn("sh")
    .unwrap()
    .with_log(stdout())
    .unwrap();

writeln!(sh, "Hello World").unwrap();

An example of async feature.

You need to provide a features=["async"] flag to use it.

use expectrl::spawn;

let mut p = spawn("cat").await.unwrap();
p.expect("hello").await.unwrap();

For more examples, check the examples directory.

Re-exports

pub use session::Session;

Modules

This module contains a InteractOptions which allows a castomization of crate::Session::interact flow.

This module contains a platform independent abstraction over an os process.

This module contains a list of special Sessions that can be spawned.

This module contains a system independent Session representation.

Stream module contains a set of IO (write/read) wrappers.

Macros

Check macros provides a convient way to check if things are available in a stream of a process.

Structs

Any matches uses all provided lookups and returns a match from a first successfull match.

Captures is a represention of matched pattern.

Eof consider a match when an EOF is reached.

NBytes matches N bytes from the stream.

Regex tries to look up a match by a regex.

Enums

ControlCode represents the standard ASCII control codes wiki

An main error type used in crate.

Possible return values from wait() or waitpid().

Traits

Needle an interface for search of a match in a buffer.

Functions

Spawn spawnes a new session.