繁体   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