次の簡単なプログラムがあります。
# -*- 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)
- なぜこれが失敗するのですか?プログラムの実行方法にリダイレクトが影響するのはなぜですか? シェルで実行されるプログラムは常にリダイレクトされると予想していました。端末プログラムにリダイレクトされることもあれば、別のプログラムにリダイレクトされることもあります (
less
この場合)。「宛先」プログラムがソースプログラムの実行に影響を与えるのはなぜですか? - プログラムが端末に送信されるか別の宛先に送信されるかに関係なく、プログラムが確実に実行されるようにするにはどうすればよいですか?