[英]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.