我有一个python3脚本,它将输出写入stdout,但是当我将输出导入head或tail时,它会抱怨。请注意,在下面的示例输出中,它是可以工作的,因为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
如果您需要脚本中超出错误消息所包含内容的代码,请通知我。我不确定什么是相关的。
最佳答案
./script.py '../Testdata/*indels.ss' -m 5 | awk 'NR >= 3 {exit} 1'
将显示与
head -2
相同的行为。您可以将
SIGPIPE
处理程序设置为安静地杀死程序的处理程序:import signal
signal.signal(signal.SIGPIPE, signal.SIG_DFL)
关于python - 为什么我的Python3脚本不愿意将其输出汇总到head或tail(sys模块)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11423225/