簡體   English   中英

python腳本的管道輸出

[英]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.encodingunicode編碼為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM