python脚本的管道输出

mbb*_*mbb 4 python terminal piping

我正在运行./sample.py --url http://blah.com而没有错误,但如果我运行./sample.py --url http://blah.com | wc -l或类似我收到一个错误:

UnicodeEncodeError: 'ascii' codec can't encode character u'\u200f' in position 0: ordinal not in range(128)

如何使python脚本与我的终端命令兼容?sys.stdin.isatty虽然它的用例似乎正好相反,但我一直在看.

unu*_*tbu 6

当Python检测到它正在打印到终端时,sys.stdout.encoding设置为终端的编码.当你printa unicode,使用the unicode编码为a .strsys.stdout.encoding

当Python没有检测到它正在打印到终端时,sys.stdout.encoding设置为None.当你print一个unicode,该ascii编解码器用于(至少在Python2).如果unicode包含的代码指向0-127之外,则会导致UnicodeError .

解决此问题的一种方法是unicode在打印前明确编码.这也许是正确的方法,但如果你周围散布着很多印刷语句,那就太费力了.

解决此问题的另一种方法是将PYTHONIOENCODING环境变量设置为适当的编码.例如,

PYTHONIOENCODING=utf-8
Run Code Online (Sandbox Code Playgroud)

然后将使用此编码而不是将ascii输出打印到文件时.

有关更多信息,请参见PrintFails Wiki页面.