我有以下简单的程序:
# -*- coding: utf-8 -*-
GREEK = u'ΑΒΓΔ ΕΖΗΘ ΙΚΛΜ ΝΞΟΠ ΡΣΤΥ ΦΧΨΩ αβγδ εζηθ ικλμ νξοπ ρςτυ φχψω'
print GREEK
正如预期的那样,在终端上运行它会产生:
$ python test.py
ΑΒΓΔ ΕΖΗΘ ΙΚΛΜ ΝΞΟΠ ΡΣΤΥ ΦΧΨΩ αβγδ εζηθ ικλμ νξοπ ρςτυ φχψω
但是将输出传递到另一个程序会导致错误:
$ python test.py | less
Traceback (most recent call last):
File "test.py", line 5, in <module>
print GREEK
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)
Traceback (most recent call last):
File "ddd.py", line 5, in <module>
print GREEK
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)
- 为什么会失败?为什么重定向会影响程序的运行方式?我本来希望在 shell 中运行的程序总是被重定向:有时到终端程序,有时到另一个程序(
less
在这种情况下)。为什么“目标”程序会影响源程序的执行? - 我可以做些什么来确保程序运行独立于它是发送到终端还是发送到另一个目的地?