Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

can_colorize() ignores FORCE_COLOR/NO_COLOR/TERM when -E is set #127873

Open
hugovk opened this issue Dec 12, 2024 · 0 comments
Open

can_colorize() ignores FORCE_COLOR/NO_COLOR/TERM when -E is set #127873

hugovk opened this issue Dec 12, 2024 · 0 comments
Labels
3.13 bugs and security fixes 3.14 new features, bugs and security fixes stdlib Python modules in the Lib dir type-bug An unexpected behavior, bug, or error

Comments

@hugovk
Copy link
Member

hugovk commented Dec 12, 2024

Bug report

Bug description:

Using one of the FORCE_COLOR, NO_COLOR or TERM=dumb environment variables is ignored when you use Python with -E.

-E means:

Ignore all PYTHON* environment variables, e.g. PYTHONPATH and PYTHONHOME, that might be set.

The -E is stored in sys.flags.ignore_environment.

sys.flags.ignore_environment is used to ignore PYTHON_COLORS (correct) but it's also ignoring these other env vars (incorrect).

For example, this is not colourised, as expected:

❯ NO_COLOR=1 python3.13 -c 1/0
Traceback (most recent call last):
  File "<string>", line 1, in <module>
    1/0
    ~^~
ZeroDivisionError: division by zero

image

However, NO_COLOR=1 is ignored when passing -E and the output has colour when it should not:

❯ NO_COLOR=1 python3.13 -E -c 1/0
Traceback (most recent call last):
  File "<string>", line 1, in <module>
    1/0
    ~^~
ZeroDivisionError: division by zero

image

This bit needs updating:

cpython/Lib/_colorize.py

Lines 43 to 56 in 487fdbe

if not sys.flags.ignore_environment:
if os.environ.get("PYTHON_COLORS") == "0":
return False
if os.environ.get("PYTHON_COLORS") == "1":
return True
if "NO_COLOR" in os.environ:
return False
if not COLORIZE:
return False
if not sys.flags.ignore_environment:
if "FORCE_COLOR" in os.environ:
return True
if os.environ.get("TERM") == "dumb":
return False

CPython versions tested on:

3.13, 3.14

Operating systems tested on:

Linux, macOS, Windows

Linked PRs

@hugovk hugovk added type-bug An unexpected behavior, bug, or error 3.13 bugs and security fixes 3.14 new features, bugs and security fixes labels Dec 12, 2024
@picnixz picnixz added the stdlib Python modules in the Lib dir label Dec 13, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
3.13 bugs and security fixes 3.14 new features, bugs and security fixes stdlib Python modules in the Lib dir type-bug An unexpected behavior, bug, or error
Projects
None yet
Development

No branches or pull requests

2 participants