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

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# 

24 

25""" 

26The standard streams of the command line tools 

27""" 

28 

29import codecs 

30import io 

31import sys 

32 

33 

34def use_utf8_stdio(): 

35 """ 

36 Makes stdout and stderr write UTF-8, as Python does by default from 3.15 on (PEP 686). 

37 

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)