我有以下簡單的程序:管道輸出使蟒程序失敗
# -*- 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
)。爲什麼「目標」程序會影響源程序的執行? - 我可以做些什麼來確保程序獨立運行,無論它是發送到終端還是發送到另一個目的地?
和http:// stackove rflow.com/questions/17918746/print-unicode-string-to-console-ok-but-fails-when-redirect-to-a-file-how-to-fix/17918823#17918823和http:// stackoverflow。理解-python-unicode-and-linux-terminal和http://stackoverflow.com/questions/17430168/python-encoding-issue-when-using-linux –
首先,_you_知道什麼編碼其他程序期望它的stdin?如果是這樣,你必須告訴Python。如果沒有,這裏沒有合理的答案,因爲Python不能在你不能的時候奇蹟般地知道它...... – abarnert