failed WRONG_FIX UNSUBMITTED wrong_fix_unsubmitted(None) · None tool calls · 0 s · Textualize/rich
(not found in data/tasks.jsonl)
| # | Tool | Arguments | Result |
|---|---|---|---|
| No trace captured. | |||
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## [Unreleased]
+
+### Fixed
+
+- Fall back to `sys.__stderr__` on POSIX systems when trying to get the terminal size (fix issues when Rich is piped to another process)
+
## [12.2.0] - 2022-04-05
### Changed
--- a/CONTRIBUTORS.md
+++ b/CONTRIBUTORS.md
@@ -27,6 +27,7 @@ The following people have contributed to the development of Rich:
- [Nathan Page](https://github.com/nathanrpage97)
- [Avi Perl](https://github.com/avi-perl)
- [Laurent Peuch](https://github.com/psycojoker)
+- [Olivier Philippon](https://github.com/DrBenton)
- [Kylian Point](https://github.com/p0lux)
- [Kyle Pollina](https://github.com/kylepollina)
- [Clément Robert](https://github.com/neutrinoceros)
--- a/rich/console.py
+++ b/rich/console.py
@@ -82,17 +82,21 @@ class NoChange:
NO_CHANGE = NoChange()
+try:
+ _STDIN_FILENO = sys.__stdin__.fileno()
+except Exception:
+ _STDIN_FILENO = 0
try:
_STDOUT_FILENO = sys.__stdout__.fileno()
except Exception:
_STDOUT_FILENO = 1
-
try:
_STDERR_FILENO = sys.__stderr__.fileno()
except Exception:
_STDERR_FILENO = 2
-_STD_STREAMS = (_STDOUT_FILENO, _STDERR_FILENO)
+_STD_STREAMS = (_STDIN_FILENO, _STDOUT_FILENO, _STDERR_FILENO)
+_STD_STREAMS_OUTPUT = (_STDOUT_FILENO, _STDERR_FILENO)
CONSOLE_HTML_FORMAT = """\
<!DOCTYPE html>
@@ -1102,13 +1106,13 @@ class Console:
except OSError: # Probably not a terminal
pass
else:
- try:
- width, height = os.get_terminal_size(sys.__stdin__.fileno())
- except (AttributeError, ValueError, OSError):
+ for file_descriptor in _STD_STREAMS:
try:
- width, height = os.get_terminal_size(sys.__stdout__.fileno())
+ width, height = os.get_terminal_size(file_descriptor)
except (AttributeError, ValueError, OSError):
pass
+ else:
+ break
columns = self._environ.get("COLUMNS")
if columns is not None and columns.isdigit():
@@ -2066,7 +2070,7 @@ class Console:
if self.legacy_windows:
try:
use_legacy_windows_render = (
- self.file.fileno() in _STD_STREAMS
+ self.file.fileno() in _STD_STREAMS_OUTPUT
)
except (ValueError, io.UnsupportedOperation):
pass
...................F
=================================== FAILURES ===================================
_______________________________ test_print_json ________________________________
def test_print_json():
console = Console(file=io.StringIO(), color_system="truecolor")
console.print_json('[false, true, null, "foo"]', indent=4)
result = console.file.getvalue()
print(repr(result))
expected = '\x1b[1m[\x1b[0m\n \x1b[3;91mfalse\x1b[0m,\n \x1b[3;92mtrue\x1b[0m,\n \x1b[3;35mnull\x1b[0m,\n \x1b[32m"foo"\x1b[0m\n\x1b[1m]\x1b[0m\n'
> assert result == expected
E AssertionError: assert '\x1b[1m[\x1b...[1m]\x1b[0m\n' == '\x1b[1m[\x1b...[1m]\x1b[0m\n'
E
E [1m[[0m
E - [3;91mfalse[0m,
E ? ---
E + [3mfalse[0m,
E - [3;92mtrue[0m,
E ? ---...
E
E ...Full output truncated (7 lines hidden), use '-vv' to show
tests/test_console.py:204: AssertionError
----------------------------- Captured stdout call -----------------------------
'\x1b[1m[\x1b[0m\n \x1b[3mfalse\x1b[0m,\n \x1b[3mtrue\x1b[0m,\n \x1b[3mnull\x1b[0m,\n "foo"\n\x1b[1m]\x1b[0m\n'
!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!
1 failed, 19 passed in 0.19s