Skip to content

[BUG] [Windows only] Table defaults to safe_box when the output is piped. #3625

@zapta

Description

@zapta

Describe the bug

When running on window and with piped output, the table are displayed in "safe box" mode by default. This is not the case on Max OSX and Linux.

Run this on windows and pipe the output.

from rich.console import Console
from rich.table import Table
from rich import box

console = Console(color_system="auto", force_terminal=True)

table = Table(
  show_header=True,
  show_lines=True,
  box=box.SQUARE,
  border_style="dim",
  title="My Table")

table.add_column("COL1")
table.add_column("COL2")

table.add_row("aaa", "bbb", style="red")
table.add_row("ccc", "ddd")

console.print(table)

Workaround: Add this at the beginning of the program:

sys.stdout.reconfigure(encoding='utf-8')

Platform

Click to expand

What platform (Win/Linux/Mac) are you running on? What terminal software are you using?

Windows 10. (it's ok on Mac and Linux). Reproduced on both windows cmd and on git bash.

~/work$ python -m rich.diagnose
pip freeze | grep rich
╭───────────────────────── <class 'rich.console.Console'> ─────────────────────────╮
│ A high level console interface.                                                  │
│                                                                                  │
│ ╭──────────────────────────────────────────────────────────────────────────────╮ │
│ │ <console width=152 ColorSystem.TRUECOLOR>                                    │ │
│ ╰──────────────────────────────────────────────────────────────────────────────╯ │
│                                                                                  │
│     color_system = 'truecolor'                                                   │
│         encoding = 'utf-8'                                                       │
│             file = <_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'> │
│           height = 42                                                            │
│    is_alt_screen = False                                                         │
│ is_dumb_terminal = False                                                         │
│   is_interactive = True                                                          │
│       is_jupyter = False                                                         │
│      is_terminal = True                                                          │
│   legacy_windows = False                                                         │
│         no_color = False                                                         │
│          options = ConsoleOptions(                                               │
│                        size=ConsoleDimensions(width=152, height=42),             │
│                        legacy_windows=False,                                     │
│                        min_width=1,                                              │
│                        max_width=152,                                            │
│                        is_terminal=True,                                         │
│                        encoding='utf-8',                                         │
│                        max_height=42,                                            │
│                        justify=None,                                             │
│                        overflow=None,                                            │
│                        no_wrap=False,                                            │
│                        highlight=None,                                           │
│                        markup=None,                                              │
│                        height=None                                               │
│                    )                                                             │
│            quiet = False                                                         │
│           record = False                                                         │
│         safe_box = True                                                          │
│             size = ConsoleDimensions(width=152, height=42)                       │
│        soft_wrap = False                                                         │
│           stderr = False                                                         │
│            style = None                                                          │
│         tab_size = 8                                                             │
│            width = 152                                                           │
╰──────────────────────────────────────────────────────────────────────────────────╯
╭── <class 'rich._windows.WindowsConsoleFeatures'> ───╮
│ Windows features available.                         │
│                                                     │
│ ╭─────────────────────────────────────────────────╮ │
│ │ WindowsConsoleFeatures(vt=True, truecolor=True) │ │
│ ╰─────────────────────────────────────────────────╯ │
│                                                     │
│ truecolor = True                                    │
│        vt = True                                    │
╰─────────────────────────────────────────────────────╯
╭────── Environment Variables ───────╮
│ {                                  │
│     'TERM': 'xterm',               │
│     'COLORTERM': None,             │
│     'CLICOLOR': None,              │
│     'NO_COLOR': None,              │
│     'TERM_PROGRAM': 'mintty',      │
│     'COLUMNS': None,               │
│     'LINES': None,                 │
│     'JUPYTER_COLUMNS': None,       │
│     'JUPYTER_LINES': None,         │
│     'JPY_PARENT_PID': None,        │
│     'VSCODE_VERBOSE_LOGGING': None │
│ }                                  │
╰────────────────────────────────────╯
platform="Windows"
rich==13.9.4

And this is the same output with piped output (notice that the encoding is different):

~/work$ python -m rich.diagnose | cat
+------------------------- <class 'rich.console.Console'> --------------------------+
| A high level console interface.                                                   |
|                                                                                   |
| +-------------------------------------------------------------------------------+ |
| | <console width=151 None>                                                      | |
| +-------------------------------------------------------------------------------+ |
|                                                                                   |
|     color_system = None                                                           |
|         encoding = 'cp1252'                                                       |
|             file = <_io.TextIOWrapper name='<stdout>' mode='w' encoding='cp1252'> |
|           height = 42                                                             |
|    is_alt_screen = False                                                          |
| is_dumb_terminal = False                                                          |
|   is_interactive = False                                                          |
|       is_jupyter = False                                                          |
|      is_terminal = False                                                          |
|   legacy_windows = True                                                           |
|         no_color = False                                                          |
|          options = ConsoleOptions(                                                |
|                        size=ConsoleDimensions(width=151, height=42),              |
|                        legacy_windows=True,                                       |
|                        min_width=1,                                               |
|                        max_width=151,                                             |
|                        is_terminal=False,                                         |
|                        encoding='cp1252',                                         |
|                        max_height=42,                                             |
|                        justify=None,                                              |
|                        overflow=None,                                             |
|                        no_wrap=False,                                             |
|                        highlight=None,                                            |
|                        markup=None,                                               |
|                        height=None                                                |
|                    )                                                              |
|            quiet = False                                                          |
|           record = False                                                          |
|         safe_box = True                                                           |
|             size = ConsoleDimensions(width=151, height=42)                        |
|        soft_wrap = False                                                          |
|           stderr = False                                                          |
|            style = None                                                           |
|         tab_size = 8                                                              |
|            width = 151                                                            |
+-----------------------------------------------------------------------------------+
+--- <class 'rich._windows.WindowsConsoleFeatures'> ----+
| Windows features available.                           |
|                                                       |
| +---------------------------------------------------+ |
| | WindowsConsoleFeatures(vt=False, truecolor=False) | |
| +---------------------------------------------------+ |
|                                                       |
| truecolor = False                                     |
|        vt = False                                     |
+-------------------------------------------------------+
+------ Environment Variables -------+
| {                                  |
|     'TERM': 'xterm',               |
|     'COLORTERM': None,             |
|     'CLICOLOR': None,              |
|     'NO_COLOR': None,              |
|     'TERM_PROGRAM': 'mintty',      |
|     'COLUMNS': None,               |
|     'LINES': None,                 |
|     'JUPYTER_COLUMNS': None,       |
|     'JUPYTER_LINES': None,         |
|     'JPY_PARENT_PID': None,        |
|     'VSCODE_VERBOSE_LOGGING': None |
| }                                  |
+------------------------------------+
platform="Windows"

If you're using Rich in a Jupyter Notebook, run the following snippet in a cell
and paste the output in your bug report.

from rich.diagnose import report
report()

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions