in reply to Communicating with unflushed child process

The odds are that myProgram is detecting that it is not talking to a terminal and therefore is turning on buffering.

One solution is to use Expect to do what you're trying above except that it gives the program you're trying to automate a terminal so that it won't decide to buffer.

Another solution (better when doable, but isn't always doable) is to have the program that you're trying to automate be written as a library with a very small program that calls it. Then you can run the program that you have, and easily write other programs that do the same thing in an automated way.

The big reason to prefer the latter approach is that it is hard with Expect to reliably take care of all of the unexpected outputs that a program can produce when it runs into error conditions. This leads to fragility that will come back and bite you when you least expect it to.

  • Comment on Re: Communicating with unflushed child process