1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
//! Expectrl a library for running, controlling and communicating with a process. //! //! It supports `async/await`. To use it you should specify a `async` feature. //! //! # Example //! //! ```no_run,ignore //! 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)); //! ``` mod error; mod expect; mod log; pub mod repl; mod session; pub use error::Error; pub use expect::{Eof, NBytes, Needle, Regex}; pub use ptyprocess::{ControlCode, Signal, WaitStatus}; #[cfg(not(feature = "log"))] #[cfg(not(feature = "async_log"))] pub type Session = session::Session; #[cfg(any(feature = "log", feature = "async_log"))] pub type Session = log::SessionWithLog; /// Spawn spawnes a new session. /// /// It accepts a command and possibly arguments just as string. /// It doesn't parses ENV variables. For complex constrictions use [`Session::spawn_cmd`]. /// /// # Example /// /// ```no_run,ignore /// use expectrl::{spawn, ControlCode}; /// use std::{thread, time::Duration}; /// use std::io::{Read, Write}; /// /// let mut p = spawn("cat").unwrap(); /// p.send_line("Hello World").unwrap(); /// /// thread::sleep(Duration::from_millis(300)); // give 'cat' some time to set up /// p.send_control(ControlCode::EndOfText).unwrap(); // abort: SIGINT /// /// let mut buf = String::new(); /// p.read_to_string(&mut buf).unwrap(); /// /// assert_eq!(buf, "Hello World\r\n"); /// ``` /// /// [`Session::spawn_cmd`]: ./struct.Session.html?#spawn_cmd pub fn spawn<S: AsRef<str>>(cmd: S) -> Result<Session, Error> { Session::spawn(cmd.as_ref()) }