Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked
 
PerlMonks  

Using AnyEvent to control an interactive program

by Darth Ed (Beadle)
on Oct 04, 2016 at 01:46 UTC ( [id://1173207] : perlquestion . print w/replies, xml ) Need Help??

Darth Ed has asked for the wisdom of the Perl Monks concerning the following question:

I'm trying to interface with an interactive, shell-like program running inside a Docker container, but I think my question applies to any interactive program with prompts and such, /bin/bash, for example. Basically, I need to get the output from the program being controlled until it displays a prompt and waits for input, then provide a line of input to the program when/as specified by the user, get the output, and then repeat until the program being controlled exits. I plan to get the input lines one at a time from a message queue (suggestions welcome) and return the subsequent output to the user. Starting and stopping the program being controlled for each input isn't an option as the program isn't stateless, so it needs to stay running between inputs.

I've read the AnyEvent Intro, FAQ, and AnyEvent::Handle pods and scoured the web for examples, but I haven't come across an example that seems to deal with this level of interactivity.

If someone can spare a clue or some sample code, I would be very appreciative.

Replies are listed 'Best First'.
Re: Using AnyEvent to control an interactive program
by tybalt89 (Monsignor) on Oct 04, 2016 at 02:11 UTC

    Seems like you want Expect.pm

      I guess what I want is AnyEvent::Expect, an Expect implementation based on AnyEvent, but no such module exists, unfortunately.

        So just grab AnyEvent and Expect.pm and a really big vise and squeeze them together :)