code: def _run_command(self, env):
          
          output = ""
          urgent = False
          # run the block/command
          for command in self.commands:
              try:
                  process = Popen(
                      command,
                      stdout=PIPE,
                      stderr=PIPE,
                      universal_newlines=True,
                      env=env,
                      shell=True,
                  )
              except Exception as e:
                  msg = "Command '{cmd}' {error}"
                  raise Exception(msg.format(cmd=command, error=e))
  
              _output, _error = process.communicate()
              if self.py3.is_python_2():
                  _output = _output.decode("utf-8")
                  _error = _error.decode("utf-8")
              retcode = process.poll()
  
              # return code of 33 means urgent
              _urgent = retcode == 33
  
              if retcode and retcode != 33 or _error:
                  msg = "i3block command '{cmd}' had an error see log for details."
                  msg = msg.format(cmd=command)
                  self.py3.notify_user(msg, rate_limit=None)
                  msg = "i3block command '{cmd}' had error {error} returned {retcode}"
                  msg = msg.format(cmd=command, error=_error, retcode=retcode)
                  if hash(msg) not in self.errors:
                      self.py3.log(msg, level=self.py3.LOG_ERROR)
                      self.errors.append(hash(msg))
                  _output = "Error\nError\n{}".format(
                      self.py3.COLOR_ERROR or self.py3.COLOR_BAD
                  )
              # we have got output so update the received output
              # this provides support for i3blocks pseudo click support
              if _output:
                  output = _output
                  urgent = _urgent
          return output, urgent
docs: Run command(s) and return output and urgency.