docs: def wait(self, timeout=None):
          """Wait for command to complete.
  
          Timeout:
           - discussion: http://stackoverflow.com/questions/1191374/subprocess-with-timeout
           - implementation: threading
  
          :rtype: self
  
          """
  
          if timeout is not None:
              if not self._thread:
                  self._thread = threading.Thread(target=self._wait4process)
                  self._thread.daemon = 1
                  self._thread.start()
  
          if self._thread:
              self._thread.join(timeout=timeout)
              self.timeout_happened = self.timeout_happened or self._thread.isAlive()
          else:
              # no timeout and no existing thread
              self._wait4process()
  
          return self