Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
18a8affc
Commit
18a8affc
authored
Apr 24, 2016
by
Serhiy Storchaka
Browse files
Options
Browse Files
Download
Plain Diff
Issue #26801: shutil.get_terminal_size() now handles the case of stdout is
reopened on Windows. Added tests for fallbacks.
parents
a497774b
d30829de
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
32 additions
and
1 deletion
+32
-1
Lib/shutil.py
Lib/shutil.py
+3
-1
Lib/test/test_shutil.py
Lib/test/test_shutil.py
+29
-0
No files found.
Lib/shutil.py
View file @
18a8affc
...
...
@@ -1072,7 +1072,9 @@ def get_terminal_size(fallback=(80, 24)):
if
columns
<=
0
or
lines
<=
0
:
try
:
size
=
os
.
get_terminal_size
(
sys
.
__stdout__
.
fileno
())
except
(
AttributeError
,
OSError
):
except
(
AttributeError
,
ValueError
,
OSError
):
# stdout is None, closed, detached, or not a terminal, or
# os.get_terminal_size() is unsupported
size
=
os
.
terminal_size
(
fallback
)
if
columns
<=
0
:
columns
=
size
.
columns
...
...
Lib/test/test_shutil.py
View file @
18a8affc
...
...
@@ -1828,14 +1828,24 @@ class TermsizeTests(unittest.TestCase):
with
support
.
EnvironmentVarGuard
()
as
env
:
env
[
'COLUMNS'
]
=
'777'
del
env
[
'LINES'
]
size
=
shutil
.
get_terminal_size
()
self
.
assertEqual
(
size
.
columns
,
777
)
with
support
.
EnvironmentVarGuard
()
as
env
:
del
env
[
'COLUMNS'
]
env
[
'LINES'
]
=
'888'
size
=
shutil
.
get_terminal_size
()
self
.
assertEqual
(
size
.
lines
,
888
)
def
test_bad_environ
(
self
):
with
support
.
EnvironmentVarGuard
()
as
env
:
env
[
'COLUMNS'
]
=
'xxx'
env
[
'LINES'
]
=
'yyy'
size
=
shutil
.
get_terminal_size
()
self
.
assertGreaterEqual
(
size
.
columns
,
0
)
self
.
assertGreaterEqual
(
size
.
lines
,
0
)
@
unittest
.
skipUnless
(
os
.
isatty
(
sys
.
__stdout__
.
fileno
()),
"not on tty"
)
@
unittest
.
skipUnless
(
hasattr
(
os
,
'get_terminal_size'
),
'need os.get_terminal_size()'
)
...
...
@@ -1859,6 +1869,25 @@ class TermsizeTests(unittest.TestCase):
self
.
assertEqual
(
expected
,
actual
)
def
test_fallback
(
self
):
with
support
.
EnvironmentVarGuard
()
as
env
:
del
env
[
'LINES'
]
del
env
[
'COLUMNS'
]
# sys.__stdout__ has no fileno()
with
support
.
swap_attr
(
sys
,
'__stdout__'
,
None
):
size
=
shutil
.
get_terminal_size
(
fallback
=
(
10
,
20
))
self
.
assertEqual
(
size
.
columns
,
10
)
self
.
assertEqual
(
size
.
lines
,
20
)
# sys.__stdout__ is not a terminal on Unix
# or fileno() not in (0, 1, 2) on Windows
with
open
(
os
.
devnull
,
'w'
)
as
f
,
\
support
.
swap_attr
(
sys
,
'__stdout__'
,
f
):
size
=
shutil
.
get_terminal_size
(
fallback
=
(
30
,
40
))
self
.
assertEqual
(
size
.
columns
,
30
)
self
.
assertEqual
(
size
.
lines
,
40
)
class
PublicAPITests
(
unittest
.
TestCase
):
"""Ensures that the correct values are exposed in the public API."""
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment