code: def _handle_execute_reply(self, msg):
          
          msg_id = msg['parent_header']['msg_id']
          info = self._request_info['execute'].get(msg_id)
          # unset reading flag, because if execute finished, raw_input can't
          # still be pending.
          self._reading = False
  
          # Refresh namespacebrowser after the kernel starts running
          exec_count = msg['content'].get('execution_count', '')
          if exec_count == 0 and self._kernel_is_starting:
              if self.namespacebrowser is not None:
                  self.set_namespace_view_settings()
                  self.refresh_namespacebrowser()
              self._kernel_is_starting = False
              self.ipyclient.t0 = time.monotonic()
  
          # Handle silent execution of kernel methods
          if info and info.kind == 'silent_exec_method' and not self._hidden:
              self.handle_exec_method(msg)
              self._request_info['execute'].pop(msg_id)
          else:
              super(NamepaceBrowserWidget, self)._handle_execute_reply(msg)
docs: Reimplemented to handle communications between Spyder
          and the kernel