4

我运行./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尽管它的用例似乎相反,但我一直看到参考。

4

2 回答 2

6

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

当 Python 未检测到它正在打印到终端时,sys.stdout.encoding设置为None. 当你printaunicode时,使用ascii编解码器(至少在 Python2 中)。unicode如果包含 0-127 之外的代码点,这将导致 UnicodeError 。

解决此问题的一种方法是unicode在打印之前显式编码。这也许是正确的方法,但如果你有很多散落在各处的打印语句,这可能会很费力。

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

PYTHONIOENCODING=utf-8

然后将使用此编码代替将ascii输出打印到文件时。

有关详细信息,请参阅PrintFails wiki 页面

于 2012-11-20T20:40:46.447 回答
-1

尝试:

(./sample.py --url http://blah.com) | wc -l

这会产生一个子shell来运行您的python脚本,然后将输出从管道stdout传输到wc

于 2012-11-20T20:35:59.470 回答