Is shutil.get_terminal_size useless?

Steve D'Aprano steve+python at
Sat Jan 28 06:00:57 EST 2017

On Sat, 28 Jan 2017 07:39 pm, Peter Otten wrote:

> One potential advantage of shutil.get_terminal_size() is that you can
> affect it with an environment variable:
> $ python3 | cat
> shutil: os.terminal_size(columns=999, lines=999)
> os: os.terminal_size(columns=72, lines=48)
> $ COLUMNS=123 python3 | cat
> shutil: os.terminal_size(columns=123, lines=999)
> os: os.terminal_size(columns=72, lines=48)

Unless your terminal *actually is* 123 columns wide, I don't see that as an
advantage. I see that as "Hey look, we can fool shutil into returning
absolute garbage instead of the terminal size!"

I can already read environment variables using os.getenv() and os.environ,
so this gives me no new functionality.

> I have the line
> in my .bashrc, so by default I see the physical size:
> $ export COLUMNS LINES
> $ python3 | cat
> shutil: os.terminal_size(columns=72, lines=48)
> os: os.terminal_size(columns=72, lines=48)

But what happens if you resize the terminal while the process is running?
Again, the os.get_terminal_size() correctly returns the updated size, while
shutil.get_terminal_size() doesn't.

“Cheer up,” they said, “things could be worse.” So I cheered up, and sure
enough, things got worse.

More information about the Python-list mailing list