code: def run(self):
      self.channel = self.client.get_transport().open_session()
      self.channel.exec_command(self.command)
  
      while True:
          self._read_stdout()
          self._read_stderr()
          if self.channel.exit_status_ready():
              break
          time.sleep(0.1)
      self.exit_code = self.channel.recv_exit_status()
      with open(str(self.exit_code_path), "w") as f:
          f.write(str(self.exit_code))
  
      self._read_stdout()
      self._read_stderr()
      self.ui_mode.end()
  
file_path: labml/remote/labml_remote/execute/remote.py
imports: import threading
  import time
  from pathlib import Path
  from typing import NamedTuple, Optional
  from paramiko import SSHClient
  from labml import monit
  from labml_remote.execute import UIMode
label_desc: Use image node_id 4 for calling the ExecutorThread obj's underlying member method code with example usage: obj.run() without return types