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