mdt: Fix the windows console classes.
Inner classes have strange behaviors in python. This makes things a bit more
clearer.
Change-Id: Icf3cd47a276e70425363d19d49e1f686bc7bcd39
diff --git a/mdt/console.py b/mdt/console.py
index c56ac57..796e2f9 100644
--- a/mdt/console.py
+++ b/mdt/console.py
@@ -24,6 +24,12 @@
import threading
+TYPE_KEYBOARD_INPUT = 0
+TYPE_TERMINAL_OUTPUT = 1
+TYPE_REMOTE_CLOSED = 2
+TYPE_SOCKET_TIMEOUT = 3
+
+
class ConnectionClosedError(Exception):
def __init__(self, exit_code=None):
self.exit_code = exit_code
@@ -80,7 +86,7 @@
if self.channel in read:
try:
data = self.channel.recv(256)
- if len(data) == 0:
+ if not data:
exit_code = None
if self.channel.exit_status_ready():
exit_code = self.channel.recv_exit_status()
@@ -117,49 +123,46 @@
termios.tcsetattr(self.inputfile, TCSADRAIN, old_tty_attrs)
-class WindowsConsole:
- TYPE_KEYBOARD_INPUT = 0
- TYPE_TERMINAL_OUTPUT = 1
- TYPE_REMOTE_CLOSED = 2
- TYPE_SOCKET_TIMEOUT = 3
+class KeyboardInputThread(threading.Thread):
+ def __init__(self, queue):
+ super(KeyboardInputThread, self).__init__()
+ self.daemon = True
+ self.queue = queue
- class KeyboardInputThread(threading.Thread):
- def __init__(self, queue):
- super(KeyboardInputThread, self).__init__()
- self.daemon = True
- self.queue = queue
+ def run(self):
+ while True:
+ ch = sys.stdin.read(1)
+ self.queue.put((KEYBOARD_INPUT_DATA, ch))
- def run(self):
- while True:
- ch = sys.stdin.read(1)
- self.queue.put((KEYBOARD_INPUT_DATA, ch))
- class TerminalOutputThread(threading.Thread):
- def __init__(self, queue, channel):
- super(TerminalOutputThread, self).__init__()
- self.daemon = True
- self.queue = queue
- self.channel = channel
+class TerminalOutputThread(threading.Thread):
+ def __init__(self, queue, channel):
+ super(TerminalOutputThread, self).__init__()
+ self.daemon = True
+ self.queue = queue
+ self.channel = channel
- def run(self):
- while True:
- try:
- data = self.channel.recv(256)
- if len(data) == 0:
- exit_code = None
- if self.channel.exit_status_ready():
- exit_code = self.channel.recv_exit_status()
- self.queue.put((TYPE_REMOTE_CLOSED, exit_code))
- break
- data = data.decode("utf-8", errors="ignore")
- self.queue.put((TYPE_TERMINAL_OUTPUT, data))
- except socket.timeout:
- self.queue.put((TYPE_SOCKET_TIMEOUT, None))
+ def run(self):
+ while True:
+ try:
+ data = self.channel.recv(256)
+ if len(data) == 0:
+ exit_code = None
+ if self.channel.exit_status_ready():
+ exit_code = self.channel.recv_exit_status()
+ self.queue.put((TYPE_REMOTE_CLOSED, exit_code))
break
+ data = data.decode("utf-8", errors="ignore")
+ self.queue.put((TYPE_TERMINAL_OUTPUT, data))
+ except socket.timeout:
+ self.queue.put((TYPE_SOCKET_TIMEOUT, None))
+ break
- exit_status = self.channel.recv_exit_status()
- self.queue.put((TYPE_EXIT_CODE, exit_status))
+ exit_status = self.channel.recv_exit_status()
+ self.queue.put((TYPE_EXIT_CODE, exit_status))
+
+class WindowsConsole:
def __init__(self, channel, inputfile):
self.channel = channel
self.dataQueue = queue.Queue()