это мой журналпитон subprocess32 с тайм-аут, OverflowError
File "/opt/ibm/db2-governor/helpers/utils.py", line 10, in run_cmd
output = proc.communicate(timeout = timeout)[0]
File "/opt/ibm/dynamite/python/lib/python2.7/site-packages/subprocess32.py", line 927, in communicate
stdout, stderr = self._communicate(input, endtime, timeout)
File "/opt/ibm/dynamite/python/lib/python2.7/site-packages/subprocess32.py", line 1713, in _communicate
orig_timeout)
File "/opt/ibm/dynamite/python/lib/python2.7/site-packages/subprocess32.py", line 1786, in _communicate_with_poll
ready = poller.poll(self._remaining_time(endtime))
OverflowError: Python int too large to convert to C lon
поэтому код, который вызывает это
output = proc.communicate(timeout = timeout)[0]
таймаут установлен в 20, это не происходит intermitently (почти никогда, но это бывает) , im используя python 2.7.11 с библиотекой subprocess32, является ли это ошибкой python?
нормально, я проверил subprocess32.py, линия идет как этот
endtime = time.time() + timeout
ready = poller.poll(self._remaining_time(endtime))
поэтому в основном временные метки слишком большой, чтобы преобразовать в с Int, есть все, что я могу сделать, чтобы решить эту проблему?
«Если не данные или proc.poll()! = Нет:« должно быть просто », если не proc.poll()?» – cakester
Общая ловушка: 'proc.poll()' может возвращать код возврата, который может быть равен 0. Поэтому он не может закончиться. Но я думаю, что мое решение неверно: 'read' блокирует. Таким образом, тайм-аут не будет иметь никакого эффекта. Позвольте мне изменить. –
Концепция правильная, и я согласен с концепцией, принимая ответ, код, который я должен переписать в любом случае, поэтому я не знаю. D = – cakester