Я реализую программу python, которая возвращает результат подпроцесса (например, 'ls'). Подпроцесс имеет такую функцию, как подписка на непрерывный выход, более конкретный, он подписывает два результата, и существует короткий срок (около 1сек) между двумя результатами.Подпроцесс Python IOError: [Errno 4]
Итак, я разработал класс, как показано ниже, для подписки на этот вывод.
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] Прерванный системный вызов
Есть ли недостаток в коде? Пожалуйста, дайте мне знать, как удалить за исключением
Вам необходимо опубликовать сообщение о трассировке, чтобы мы могли видеть, откуда это исключение. –