|
|
|
@ -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()
|
|
|
|
|