Interfacing with terminal programs

Drifty drifty at bigfoot.com
Sun May 13 22:15:41 EDT 2001


For instance, a wrote a small Python script that basically prompted
for info, printed some text, and then ended.  When I tried using
popen2 on it I couldn't read the prompt.  It always hung.  Now a post
said that I should flush it first.  I vaguely remember trying that and
still having a problem, but I will give that a go just to
double-check.

I have a feeling that using a pty is going to be my best bet.  If that
doesn't work I am going to try Mr. Laird's suggestion of using Expect
to see if that will do the job.  Thanks for the help.

-Brett Cannon


On 13 May 2001 03:02:39 GMT, Donn Cave <donn at oz.net> wrote:
>
>I'm not sure what you mean by that.  The usual problem, when you
>run a program on a pair of pipes, is that the program's output is
>block buffered when the device is a pipe, and the output you're
>waiting to read is still in that buffer.  A prompt is a bit less
>likely to have this problem, because in the normal tty context
>where output is line buffered, you have to explicitly flush output
>from the buffer to get a prompt.  Ptys solve the buffering problem.
>The stderr stream is usually unbuffered, so it will come right out -
>but not to the output pipe, if they prompt on stderr.
>
>Anyway, the other problem that will come up with a password prompt
>is the tty ioctl that turns off echo.  That will fail on the pipe,
>which doesn't support tty ioctls.  The passwd program should abort
>at that point.  Ptys solve this problem too.
>
>| Any suggestions?  This has to run on Solaris, so using something like
>| pty is obviously iffy.
>
>I think pty is the only thing that can work.  Look for posix.openpty.
>You'll have to fiddle around with it, ptys are odd devices that are
>a little more trouble to work with.
>
>	Donn Cave, donn at oz.net




More information about the Python-list mailing list