我正在实现python程序,它返回子进程的结果(如'ls')。 子过程具有订阅连续输出的特性,更具体地说,它订阅两个结果,并且两个结果之间存在短期(约1秒)的时间。在
所以,我设计了一个类似下面的类来订阅输出。在
class Subscribe:
def __init__(self, sec):
self.m_sec = sec
def subscribeResult(self, p):
self.m_timeout = False
signal.signal(signal.SIGALRM, self.handleTimeout)
signal.alarm(self.m_sec)
returnValue = ""
try:
with p.stdout:
for line in iter(p.stdout.readline, b''):
if self.m_timeout:
signal.alarm(0)
p.kill()
return "timeout"
returnValue += line
p.stdout.close()
p.wait()
exception Exception, inst:
print inst
signal.alarm(0)
p.kill()
return "except"
signal.alarm(0)
rv = returnValue.strip()
if rv == "":
return "null"
return rv
def handleTimeout(self, signum, frame):
self.m_timeout = True
它工作得很好,但很少像下面这样引发IO异常。 :IOError:[Errno 4]系统调用中断
代码有弱点吗? 请告诉我如何删除例外
在大多数情况下,只需重试您正在执行的任何系统调用,例如,
subprocess
模块有一个helper函数来忽略EINTR
错误:用法:
^{pr2}$在python3.5中,它将自动发生。见PEP 0475 Retry system calls failing with EINTR。在
相关问题 更多 >
编程相关推荐