我正在尝试使用TravisCI上的Python 2.7.10在测试运行器中打印一些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)
错误而失败。
我试过了:
LC_ALL
:C.UTF-8
dist: trusty
deploy: \ default_text_charset: 'utf-8'
six.u()
,但抱怨TypeError: decoding Unicode is not supported
这是我的.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'
答案 0 :(得分:2)
在Python 2中,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
,请将其保存为其他名称。