|
|
|
@ -226,7 +226,7 @@ class process(StdoutableProcess):
|
|
|
|
|
self.cacheerr = b""
|
|
|
|
|
return self.cacheerr.decode("UTF-8")
|
|
|
|
|
|
|
|
|
|
def readByLine(self):
|
|
|
|
|
def readByLine(self, binary=False):
|
|
|
|
|
_cacheerr = []
|
|
|
|
|
try:
|
|
|
|
|
self._open()
|
|
|
|
@ -244,7 +244,7 @@ class process(StdoutableProcess):
|
|
|
|
|
for fd in ret[0]:
|
|
|
|
|
if fd == _stdout:
|
|
|
|
|
s = self.pipe.stdout.readline()
|
|
|
|
|
yield s.decode("UTF-8")
|
|
|
|
|
yield s if binary else s.decode("UTF-8")
|
|
|
|
|
self._cachedata.append(s)
|
|
|
|
|
if fd == _stderr:
|
|
|
|
|
s = self.pipe.stderr.readline()
|
|
|
|
@ -255,13 +255,13 @@ class process(StdoutableProcess):
|
|
|
|
|
s = self.pipe.stdout.readline()
|
|
|
|
|
if not s:
|
|
|
|
|
break
|
|
|
|
|
yield s.decode("UTF-8")
|
|
|
|
|
yield s if binary else s.decode("UTF-8")
|
|
|
|
|
self._cachedata.append(s)
|
|
|
|
|
while True:
|
|
|
|
|
s = self.pipe.stderr.readline()
|
|
|
|
|
if not s:
|
|
|
|
|
break
|
|
|
|
|
yield s.decode("UTF-8")
|
|
|
|
|
yield s if binary else s.decode("UTF-8")
|
|
|
|
|
_cacheerr.append(s)
|
|
|
|
|
break
|
|
|
|
|
except KeyboardInterrupt:
|
|
|
|
@ -273,7 +273,7 @@ class process(StdoutableProcess):
|
|
|
|
|
self.cacheerr = b''.join(_cacheerr)
|
|
|
|
|
self.close()
|
|
|
|
|
|
|
|
|
|
def read(self):
|
|
|
|
|
def read(self, binary=False):
|
|
|
|
|
"""Read all data"""
|
|
|
|
|
try:
|
|
|
|
|
self._open()
|
|
|
|
@ -281,12 +281,15 @@ class process(StdoutableProcess):
|
|
|
|
|
if self.timeout is None:
|
|
|
|
|
self.cacheresult, self.cacheerr = self.pipe.communicate()
|
|
|
|
|
else:
|
|
|
|
|
for line in self.readByLine():
|
|
|
|
|
for line in self.readByLine(binary=True):
|
|
|
|
|
pass
|
|
|
|
|
try:
|
|
|
|
|
return self.cacheresult.decode(encoding="UTF-8")
|
|
|
|
|
except UnicodeDecodeError as e:
|
|
|
|
|
return self.cacheresult.decode(encoding="UTF-16")
|
|
|
|
|
if binary == True:
|
|
|
|
|
return self.cacheresult
|
|
|
|
|
else:
|
|
|
|
|
try:
|
|
|
|
|
return self.cacheresult.decode(encoding="UTF-8")
|
|
|
|
|
except UnicodeDecodeError as e:
|
|
|
|
|
return self.cacheresult.decode(encoding="UTF-16")
|
|
|
|
|
except KeyboardInterrupt:
|
|
|
|
|
self.kill()
|
|
|
|
|
raise KeyboardInterrupt
|
|
|
|
|