【发布时间】:2014-09-16 01:11:06
【问题描述】:
我正在用 Python 编写一个解析器,它将一堆数据库行输出到标准输出。为了让数据库正确处理它们,每一行都需要完全打印到控制台。我试图防止中断使打印命令在打印一行中途停止。
我尝试了建议使用信号处理程序覆盖的the solution,但这仍然不能阻止程序中断时部分打印该行。 (我认为 WRITE 系统调用被取消以处理中断)。
我以为问题已经被issue 10956 解决了,但是我升级到 Python 2.7.5 后问题仍然存在。
你可以通过运行这个例子来亲眼看看:
# Writer
import signal
interrupted = False
def signal_handler(signal, frame):
global interrupted
iterrupted = True
signal.signal(signal.SIGINT, signal_handler)
while True:
if interrupted:
break
print '0123456789'
在终端中:
$ mkfifo --mode=0666 pipe
$ python writer.py > pipe
在另一个终端:
$ cat pipe
然后 Ctrl+C 第一个终端。有时第二个终端会以不完整的字符序列结束。
有什么方法可以确保写满行吗?
【问题讨论】:
标签: python pipe interrupt system-calls