Is shutil.get_terminal_size useless?

eryk sun eryksun at gmail.com
Sat Jan 28 15:04:45 EST 2017


On Sat, Jan 28, 2017 at 5:58 PM, Chris Angelico <rosuav at 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'


More information about the Python-list mailing list

AltStyle によって変換されたページ (->オリジナル) /