Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我的Python3脚本在将其输出传输到head或tail(sys模块)时犹豫不决?_Python_Python 3.x_Pipe - Fatal编程技术网

为什么我的Python3脚本在将其输出传输到head或tail(sys模块)时犹豫不决?

为什么我的Python3脚本在将其输出传输到head或tail(sys模块)时犹豫不决?,python,python-3.x,pipe,Python,Python 3.x,Pipe,我有一个Python3脚本,它将输出写入stdout,但当我将输出导入head或tail时,它会抱怨。请注意,在下面的示例输出中,它可以正常工作,head根据请求返回前两行输出 > ./script.py '../Testdata/*indels.ss' -m 5 | head -2 ~/Databases

我有一个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
./script.py'../Testdata/*indels.ss'-m 5 | head-2~/数据库/鸟类基因组/沙盒/组合
xread
2999 50
回溯(最近一次呼叫最后一次):
文件“/new.py”,第194行,在
系统标准输出写入(行输出)
IOError:[Errno 32]管道破裂
异常IOError:忽略中的IOError(32,“断管”)
相反,脚本的输出通过管道传输到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'-m5 | awk'NR<3{print$0}'~/Databases/Avian_genomes/Sandbox/combined
xread
2999 50
如果您需要脚本中超出错误消息所包含内容的代码,请告诉我。我不确定什么是相关的。

我将引用以下内容:

如果管道中出现一系列命令,并且

在编写器完成之前,读取命令已完成

writer接收到SIGPIPE信号

这就是头所做的。您的脚本尚未完成编写,但
head
已完成,因此
stdout
已关闭,因此出现异常

./script.py '../Testdata/*indels.ss' -m 5 | awk 'NR >= 3 {exit} 1'
将显示与头-2相同的行为

您可以将
SIGPIPE
处理程序设置为一个安静地终止程序的处理程序:

import signal
signal.signal(signal.SIGPIPE, signal.SIG_DFL)

你的第三行可能有Unicode字符吗?另请看:实际上似乎是这个问题最活跃的版本。我想可能是这样的。谢谢你的解释和参考。但是请注意,这会毁了你的程序。如果您的程序正在报告它正在做的事情的状态,添加此代码意味着您的程序现在将在通过head运行时以静默方式无法完成其工作。