[英]Pipe output of python script
我正在運行./sample.py --url http://blah.com
但沒有錯誤,但如果我運行./sample.py --url http://blah.com | wc -l
./sample.py --url http://blah.com | wc -l
或類似我收到錯誤:
UnicodeEncodeError: 'ascii' codec can't encode character u'\' in position 0: ordinal not in range(128)
如何使python腳本與我的終端命令兼容? 我一直看到對sys.stdin.isatty
引用,盡管它的用例似乎正好相反。
當Python檢測到它正在打印到終端時, sys.stdout.encoding
被設置為終端的編碼。 print
unicode
,使用sys.stdout.encoding
將unicode
編碼為str
。
當Python未檢測到它正在打印到終端時, sys.stdout.encoding
設置為None
。 print
unicode
,使用ascii
編解碼器(至少在Python2中)。 如果unicode
包含0-127之外的代碼點,則會導致UnicodeError。
解決此問題的一種方法是在打印前對您的unicode
進行顯式編碼。 這也許是正確的方法,但如果你周圍散布着很多印刷語句,那就太費力了。
解決此問題的另一種方法是將PYTHONIOENCODING環境變量設置為適當的編碼。 例如,
PYTHONIOENCODING=utf-8
然后在將輸出打印到文件時將使用此編碼而不是ascii
。
有關更多信息,請參見PrintFails Wiki頁面 。
嘗試:
(./sample.py --url http://blah.com) | wc -l
這會生成一個子shell來運行你的python腳本,然后將輸出從stdout
傳遞到wc
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.