【发布时间】:2012-07-10 22:57:05
【问题描述】:
我有一个 Python3 脚本,可以将其输出写入标准输出,但是当我将该输出通过管道传输到头部或尾部时它会报错。请注意,在下面的示例输出中它可以正常工作,因为 head 正在根据请求返回前两行输出。
> ./script.py '../Testdata/*indels.ss' -m 5 | head -2 ~/Databases/Avian_genomes/Sandbox/combined
xread
2999 50
Traceback (most recent call last):
File "./new.py", line 194, in <module>
sys.stdout.write(lineout)
IOError: [Errno 32] Broken pipe
Exception IOError: IOError(32, 'Broken pipe') in <_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'> ignored
相比之下,该脚本在将其输出通过管道传送到 awk 方面没有问题,如下所示。
> ./script.py '../Testdata/*indels.ss' -m 5 | awk 'NR < 3 {print $0}' ~/Databases/Avian_genomes/Sandbox/combined
xread
2999 50
如果您需要脚本中的某些代码超出错误消息中包含的内容,请告诉我。我不确定什么是相关的。
【问题讨论】:
-
你的第三行是否有 Unicode 字符?
-
其实IOError: [Errno 32] Broken pipe when piping:
prog.py | othercmd似乎是这个问题最活跃的版本。
标签: python python-3.x pipe