mirror of
https://github.com/clearml/wexpect-venv
synced 2025-05-05 20:54:41 +00:00
[CLN] clean non_blocking_read
This commit is contained in:
parent
0d645c4ddf
commit
6a9b086d0b
@ -108,6 +108,8 @@ class ConsoleReaderBase:
|
|||||||
self.console_pid = os.getpid()
|
self.console_pid = os.getpid()
|
||||||
self.host_pid = host_pid
|
self.host_pid = host_pid
|
||||||
self.host_process = psutil.Process(host_pid)
|
self.host_process = psutil.Process(host_pid)
|
||||||
|
self.child_process = None
|
||||||
|
self.child_pid = None
|
||||||
|
|
||||||
logger.info("ConsoleReader started")
|
logger.info("ConsoleReader started")
|
||||||
|
|
||||||
@ -125,8 +127,9 @@ class ConsoleReaderBase:
|
|||||||
try:
|
try:
|
||||||
self.initConsole()
|
self.initConsole()
|
||||||
si = win32process.GetStartupInfo()
|
si = win32process.GetStartupInfo()
|
||||||
self.__childProcess, _, childPid, self.__tid = win32process.CreateProcess(None, path, None, None, False,
|
self.__childProcess, _, self.child_pid, self.__tid = win32process.CreateProcess(None, path, None, None, False,
|
||||||
0, None, None, si)
|
0, None, None, si)
|
||||||
|
self.child_process = psutil.Process(self.child_pid)
|
||||||
|
|
||||||
except:
|
except:
|
||||||
logger.info(traceback.format_exc())
|
logger.info(traceback.format_exc())
|
||||||
@ -141,6 +144,19 @@ class ConsoleReaderBase:
|
|||||||
logger.error(traceback.format_exc())
|
logger.error(traceback.format_exc())
|
||||||
time.sleep(.1)
|
time.sleep(.1)
|
||||||
finally:
|
finally:
|
||||||
|
try:
|
||||||
|
self.terminate_child()
|
||||||
|
time.sleep(.1)
|
||||||
|
self.send_to_host(self.readConsoleToCursor())
|
||||||
|
self.sendeof()
|
||||||
|
time.sleep(.1)
|
||||||
|
self.close_connection()
|
||||||
|
logger.info('Console finished.')
|
||||||
|
except:
|
||||||
|
logger.error(traceback.format_exc())
|
||||||
|
time.sleep(.1)
|
||||||
|
|
||||||
|
|
||||||
self.terminate_child()
|
self.terminate_child()
|
||||||
time.sleep(.1)
|
time.sleep(.1)
|
||||||
self.send_to_host(self.readConsoleToCursor())
|
self.send_to_host(self.readConsoleToCursor())
|
||||||
|
@ -770,6 +770,7 @@ class SpawnBase:
|
|||||||
logger.info('Timeout exceeded in expect_any().')
|
logger.info('Timeout exceeded in expect_any().')
|
||||||
raise TIMEOUT ('Timeout exceeded in expect_any().')
|
raise TIMEOUT ('Timeout exceeded in expect_any().')
|
||||||
# Still have time left, so read more data
|
# Still have time left, so read more data
|
||||||
|
self.isalive()
|
||||||
c = self.read_nonblocking(self.maxread)
|
c = self.read_nonblocking(self.maxread)
|
||||||
freshlen = len(c)
|
freshlen = len(c)
|
||||||
time.sleep (0.01)
|
time.sleep (0.01)
|
||||||
@ -865,39 +866,32 @@ class SpawnPipe(SpawnBase):
|
|||||||
raise ValueError ('I/O operation on closed file in read_nonblocking().')
|
raise ValueError ('I/O operation on closed file in read_nonblocking().')
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.isalive()
|
s = win32file.ReadFile(self.pipe, size)[1]
|
||||||
|
|
||||||
try:
|
if s:
|
||||||
s = win32file.ReadFile(self.pipe, size)[1]
|
logger.debug(f'Readed: {s}')
|
||||||
|
else:
|
||||||
|
logger.spam(f'Readed: {s}')
|
||||||
|
|
||||||
if s:
|
if b'\x04' in s:
|
||||||
logger.debug(f'Readed: {s}')
|
self.flag_eof = True
|
||||||
else:
|
logger.info("EOF: EOF character has been arrived")
|
||||||
logger.spam(f'Readed: {s}')
|
raise EOF('EOF character has been arrived')
|
||||||
|
|
||||||
if b'\x04' in s:
|
return s.decode()
|
||||||
self.flag_eof = True
|
except pywintypes.error as e:
|
||||||
logger.info("EOF: EOF character has been arrived")
|
if e.args[0] == winerror.ERROR_BROKEN_PIPE: #109
|
||||||
raise EOF('EOF character has been arrived')
|
self.flag_eof = True
|
||||||
|
logger.info("EOF('broken pipe, bye bye')")
|
||||||
return s.decode()
|
raise EOF('broken pipe, bye bye')
|
||||||
except pywintypes.error as e:
|
elif e.args[0] == winerror.ERROR_NO_DATA:
|
||||||
if e.args[0] == winerror.ERROR_BROKEN_PIPE: #109
|
'''232 (0xE8): The pipe is being closed.
|
||||||
self.flag_eof = True
|
'''
|
||||||
logger.info("EOF('broken pipe, bye bye')")
|
self.flag_eof = True
|
||||||
raise EOF('broken pipe, bye bye')
|
logger.info("EOF('The pipe is being closed.')")
|
||||||
elif e.args[0] == winerror.ERROR_NO_DATA:
|
raise EOF('The pipe is being closed.')
|
||||||
'''232 (0xE8)
|
else:
|
||||||
The pipe is being closed.
|
raise
|
||||||
'''
|
|
||||||
self.flag_eof = True
|
|
||||||
logger.info("EOF('The pipe is being closed.')")
|
|
||||||
raise EOF('The pipe is being closed.')
|
|
||||||
else:
|
|
||||||
raise
|
|
||||||
except:
|
|
||||||
raise
|
|
||||||
return ''
|
|
||||||
|
|
||||||
def send(self, s):
|
def send(self, s):
|
||||||
"""This sends a string to the child process. This returns the number of
|
"""This sends a string to the child process. This returns the number of
|
||||||
@ -978,7 +972,6 @@ class SpawnSocket(SpawnBase):
|
|||||||
raise ValueError ('I/O operation on closed file in read_nonblocking().')
|
raise ValueError ('I/O operation on closed file in read_nonblocking().')
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.isalive()
|
|
||||||
s = self.sock.recv(size)
|
s = self.sock.recv(size)
|
||||||
|
|
||||||
if s:
|
if s:
|
||||||
@ -992,9 +985,6 @@ class SpawnSocket(SpawnBase):
|
|||||||
logger.info("EOF: EOF character has been arrived")
|
logger.info("EOF: EOF character has been arrived")
|
||||||
raise EOF('EOF character has been arrived')
|
raise EOF('EOF character has been arrived')
|
||||||
|
|
||||||
except EOF:
|
|
||||||
self.flag_eof = True
|
|
||||||
raise
|
|
||||||
except ConnectionResetError:
|
except ConnectionResetError:
|
||||||
self.flag_eof = True
|
self.flag_eof = True
|
||||||
logger.info("EOF('ConnectionResetError')")
|
logger.info("EOF('ConnectionResetError')")
|
||||||
|
Loading…
Reference in New Issue
Block a user