Coverage for klayout_pex/util/stdio.py: 57%
7 statements
« prev ^ index » next coverage.py v7.17.2, created at 2026-11-06 13:14 +0000
« prev ^ index » next coverage.py v7.17.2, created at 2026-11-06 13:14 +0000
1#
2# --------------------------------------------------------------------------------
3# SPDX-FileCopyrightText: 2024-2026 Martin Jan Köhler and Harald Pretl
4# Johannes Kepler University, Institute for Integrated Circuits.
5#
6# This file is part of KPEX
7# (see https://github.com/iic-jku/klayout-pex).
8#
9# This program is free software: you can redistribute it and/or modify
10# it under the terms of the GNU General Public License as published by
11# the Free Software Foundation, either version 3 of the License, or
12# (at your option) any later version.
13#
14# This program is distributed in the hope that it will be useful,
15# but WITHOUT ANY WARRANTY; without even the implied warranty of
16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17# GNU General Public License for more details.
18#
19# You should have received a copy of the GNU General Public License
20# along with this program. If not, see <http://www.gnu.org/licenses/>.
21# SPDX-License-Identifier: GPL-3.0-or-later
22# --------------------------------------------------------------------------------
23#
25"""
26The standard streams of the command line tools
27"""
29import codecs
30import io
31import sys
34def use_utf8_stdio():
35 """
36 Makes stdout and stderr write UTF-8, as Python does by default from 3.15 on (PEP 686).
38 A console takes any character anyway, but a pipe or a file gets the encoding of the locale,
39 e.g. cp1252 on Windows, which has no ≥ or ∈ of the help and the messages:
40 stdout fails on them (UnicodeEncodeError), stderr writes them as \\u2265.
41 """
42 for stream in (sys.stdout, sys.stderr):
43 if isinstance(stream, io.TextIOWrapper) and codecs.lookup(stream.encoding).name != 'utf-8':
44 stream.reconfigure(encoding='utf-8', errors=stream.errors)