在 TravisCI 上的 2.7.10 应用程序中打印 unicode 字符时更正 unicode 错误

Correcting unicode errors when printing unicode chars in a 2.7.10 app on TravisCI

我正在尝试在 TravisCI 上使用 Python 2.7.10 在测试 运行ner 中打印一些 unicode 字符。

在本地 (macOS),我可以 运行 这样做就好了:

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

class MyTestCase(unittest.TestCase):
    def my_test(self):
        for x in alist:
            # a long running op
            # updates item in list
            sys.stdout.write('█')

        for x in alist:
            if x.success:
                print(" ✓ pass   {}".format(x.name))
            else:
                print(" x fail   {}".format(x.name, x.err))

但是当我将它推送到 TravisCI 时,它总是失败并出现那个讨厌的 ordinal not in range(128) 错误。

我试过:

这是我的。travis.yml:

language: python

dist: trusty

python:
  - 2.7.10

install:
  - pip install --quiet future
  - pip install --quiet pyyaml
  - pip install --quiet dotmap

script:
  - cd appdir; python -m unittest tests

deploy:
  default_text_charset: 'utf-8'

在Python2中,sys.stdout.write取字节串。如果你给它 unicode,它会将它们强制为 str,这显然在这里失败了,因为使用了 ASCII。

您可以将 sys.stdout 包装在 TextIOWrapper 中(就像在 Python 3 中所做的那样):

import io
sys.stdout = io.open(sys.stdout.fileno(), 'w', encoding='utf8')

如果不想覆盖,请将其保存为其他名称sys.stdout