Добавлен параметр timeout на выполнение команды

master-3.5
Mike Hiretsky 6 years ago
parent 638b197406
commit 585133ab60

@ -113,6 +113,8 @@ class PipeProcess(StdoutableProcess):
def get_stdout(self):
return PIPE
class ProcessTimeout(FilesError):
pass
class process(StdoutableProcess):
"""Execute system command by Popen
@ -160,6 +162,7 @@ class process(StdoutableProcess):
self.envdict = kwarg.get("envdict", os.environ.copy())
self.envdict["LANG"] = kwarg.get('lang', 'C')
self.langc = "langc" in kwarg
self.timeout = kwarg.get("timeout", None)
self.stderr = kwarg.get("stderr", PIPE)
self.cwd = kwarg.get("cwd", None)
@ -226,7 +229,10 @@ class process(StdoutableProcess):
_stderr = self.pipe.stderr.fileno()
reads = [_stdout, _stderr]
while True:
ret = select.select(reads, [], [])
ret = select.select(reads, [], [], self.timeout)
if not ret[0]:
self.kill()
raise ProcessTimeout()
for fd in ret[0]:
if fd == _stdout:
s = self.pipe.stdout.readline()
@ -264,7 +270,11 @@ class process(StdoutableProcess):
try:
self._open()
if self.cacheresult is None:
self.cacheresult, self.cacheerr = self.pipe.communicate()
if self.timeout is None:
self.cacheresult, self.cacheerr = self.pipe.communicate()
else:
for line in self.readByLine():
pass
return self.cacheresult
except KeyboardInterrupt:
self.kill()

Loading…
Cancel
Save