parameters: (self,
                     expl: str,
                     user: str,
                     command: List[str],
                     *callback: Callable[[int], None])
docstring: Run a command as a different user.
          Can optionally accept a callback to run the command
          asynchronously in a thread.
docstring_summary: Run a command as a different user.
          Can optionally accept a callback to run the command
          asynchronously in a thread.
docstring_tokens: Run a command as a different user . Can optionally accept a callback to run the command asynchronously in a thread .
function: def runCommand(self,
                     expl: str,
                     user: str,
                     command: List[str],
                     *callback: Callable[[int], None]) -> None:
          """
          Run a command as a different user.
          Can optionally accept a callback to run the command
          asynchronously in a thread.
          """
          p = Popen(self.getcmd(user, command))
          if callback:
              fn, *_ = callback
              t = threading.Thread(target=SudoMethod.waitP, args=(p, fn))
              t.start()
          else:
              ret = p.wait()
              if ret != 0:
                  raise SudoException(f"Command returned failure status: {ret}")
function_tokens: def runCommand ( self , expl : str , user : str , command : List [ str ] , * callback : Callable [ [ int ] , None ] ) -> None : p = Popen ( self . getcmd ( user , command ) ) if callback : fn , * _ = callback t = threading . Thread ( target = SudoMethod . waitP , args = ( p , fn ) ) t . start ( ) else : ret = p . wait ( ) if ret != 0 : raise SudoException ( f"Command returned failure status: {ret}" )