Problems with select() and stdin (solved)

Iñigo Serna inigoserna at
Tue Aug 20 19:10:36 CEST 2002

Hello again,

El dom, 18-08-2002 a las 17:34, jepler at escribió:
> When you take input from a pipe, sys.stdin corresponds to the program on
> the left of the pipeline, not the terminal where the program is running (if
> any).

> If you open the special device /dev/tty and assign the result to sys.stdin,
> raw_input reads from the terminal again, as in this example:
> $ echo "standard input" | python -c '
> import sys;
> print,;
> sys.stdin = open("/dev/tty");
> print raw_input("? ")'
> standard input
> ? _
> This advice only applies to unix where /dev/tty is supported.

This runs ok with raw_input, but didn't work with my program, which uses
(n)curses. I needed to include an explicit close.

        fd = select([sys.stdin], [], [], 1)[0][0]
        stdin = ''.join(fd.readlines())
        # close stdin (pipe) and open terminal for reading
        sys.stdin = open(os.ttyname(1), 'r')

And now everything works ok.

Thanks Jeff,

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 196 bytes
Desc: Esta parte del mensaje esta firmada digitalmente
URL: <>

More information about the Python-list mailing list