On Sat, Jan 28, 2017 at 5:58 PM, Chris Angelico <ros...@gmail.com> wrote: > Processes in the middle of pipelines *do not have* terminals.
No, in the following case stderr is a terminal: $ echo spam | > python3 -c 'import os > print(os.get_terminal_size(2))' | > cat os.terminal_size(columns=132, lines=43) Let's also redirect stderr to the pipe: $ echo spam | > 2>&1 python3 -c 'import os > print(os.get_terminal_size(2))' | > cat Traceback (most recent call last): File "<string>", line 2, in <module> OSError: [Errno 25] Inappropriate ioctl for device Now let's open and use the controlling terminal instead: $ echo spam | > 2>&1 python3 -c 'import os > fd = os.open("/dev/tty", os.O_RDONLY) > print(os.get_terminal_size(fd))' | > cat os.terminal_size(columns=132, lines=43) Now let's get rid of the terminal via setsid: $ echo spam | > 2>&1 setsid python3 -c 'import os > fd = os.open("/dev/tty", os.O_RDONLY) > print(os.get_terminal_size(fd))' | > cat Traceback (most recent call last): File "<string>", line 2, in <module> OSError: [Errno 6] No such device or address: '/dev/tty' -- https://mail.python.org/mailman/listinfo/python-list