mirror of
https://github.com/python/cpython.git
synced 2025-07-12 13:55:34 +00:00
Issue #13609: Add two functions to query the terminal size:
os.get_terminal_size (low level) and shutil.get_terminal_size (high level). Patch by Zbigniew Jędrzejewski-Szmek.
This commit is contained in:
parent
4195b5caea
commit
bcf2b59fb5
10 changed files with 339 additions and 5 deletions
|
@ -878,3 +878,46 @@ def chown(path, user=None, group=None):
|
|||
raise LookupError("no such group: {!r}".format(group))
|
||||
|
||||
os.chown(path, _user, _group)
|
||||
|
||||
def get_terminal_size(fallback=(80, 24)):
|
||||
"""Get the size of the terminal window.
|
||||
|
||||
For each of the two dimensions, the environment variable, COLUMNS
|
||||
and LINES respectively, is checked. If the variable is defined and
|
||||
the value is a positive integer, it is used.
|
||||
|
||||
When COLUMNS or LINES is not defined, which is the common case,
|
||||
the terminal connected to sys.__stdout__ is queried
|
||||
by invoking os.get_terminal_size.
|
||||
|
||||
If the terminal size cannot be successfully queried, either because
|
||||
the system doesn't support querying, or because we are not
|
||||
connected to a terminal, the value given in fallback parameter
|
||||
is used. Fallback defaults to (80, 24) which is the default
|
||||
size used by many terminal emulators.
|
||||
|
||||
The value returned is a named tuple of type os.terminal_size.
|
||||
"""
|
||||
# columns, lines are the working values
|
||||
try:
|
||||
columns = int(os.environ['COLUMNS'])
|
||||
except (KeyError, ValueError):
|
||||
columns = 0
|
||||
|
||||
try:
|
||||
lines = int(os.environ['LINES'])
|
||||
except (KeyError, ValueError):
|
||||
lines = 0
|
||||
|
||||
# only query if necessary
|
||||
if columns <= 0 or lines <= 0:
|
||||
try:
|
||||
size = os.get_terminal_size(sys.__stdout__.fileno())
|
||||
except (NameError, OSError):
|
||||
size = os.terminal_size(fallback)
|
||||
if columns <= 0:
|
||||
columns = size.columns
|
||||
if lines <= 0:
|
||||
lines = size.lines
|
||||
|
||||
return os.terminal_size((columns, lines))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue