Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses

Re: How to handle Expect::Simple sessions to programs that end normally.

by djerius (Beadle)
on Apr 21, 2010 at 16:12 UTC ( #836103=note: print w/replies, xml ) Need Help??

in reply to How to handle Expect::Simple sessions to programs that end normally.

Expect::Simple was designed to work with programs that return a prompt after performing every action, so it really wants to see a prompt after you send a command to the program.

I can imagine adding EOF as an acceptable "prompt", but there'd have to be a way of specifying it on the fly, as EOF is typically only acceptable at the end of your communications (else you'd never catch aborted programs).

If you come up with a reasonable approach I'll add it to the module. As it stands, I think you've hit upon the only reasonable workaround.

  • Comment on Re: How to handle Expect::Simple sessions to programs that end normally.

Replies are listed 'Best First'.
Re^2: How to handle Expect::Simple sessions to programs that end normally.
by DrWhy (Chaplain) on Apr 23, 2010 at 19:16 UTC
    It's somewhat gratifying to know that after all the time I spent looking through documentation and the code for Expect and Expect::Simple that there isn't actually a solution -- the alternative being that I spent all that time and still missed something obvious!

    The fugly hack I outlined in the orig. post has been implemented and it's working fine.

    If I were working on Expect::Simple myself (which I don't have time to do!), I might just wrap that particular hack/solution up in a new method named final_send() or send_and_end() or some such. It would have the same behavior as send(), but instead of looking for a prompt it actually would expect to get a type 3 error with zero exit status, and would throw exceptions if it doesn't find that state. So you would not get that "couldn't find a prompt" error, but instead something like "controlled program didn't end as expected.". You could include information in the error text as to whether it found one of the expected prompts instead or another kind of error was raised by Expect. The advantage of this approach is that the controller also controls when the script is expected to end; if the controlled program ends 'normally' at a point you didn't expect, that still causes an exception to be raised.

    You might also want to modify the DESTROY block so that it doesn't try to end the program if it's already terminated itself.

    NB: Edited for clarity.


    "If God had meant for us to think for ourselves he would have given us brains. Oh, wait..."

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://836103]
[shmem]: Python 2.7.9
[shmem]: but! perl4 doesn't suck.
[LanX]: better try 3
[shmem]: that python stuff is none of my business.
[shmem]: but sometimes I have to debug things implemeted by "the other team" and stick their nose into their dirt.
[shmem]: because it affects "my team"

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (8)
As of 2018-03-20 18:33 GMT
Find Nodes?
    Voting Booth?
    When I think of a mole I think of:

    Results (257 votes). Check out past polls.