runGetOutput - Simply runs a command and returns the output as a string. Use #runGetResults if you need something more complex.

            @param cmd <str/list> - String of command and arguments, or list of command and arguments

                If cmd is a string, the command will be executed as if ran exactly as written in a shell. This mode supports shell-isms like '&&' and '|'
                If cmd is a list, the first element will be the executable, and further elements are arguments that will be passed to that executable.


            @param raiseOnFailure <True/False> - Default False, if True a non-zero return from the command (failure) will raise a SimpleCommandFailure, which contains all gathered output and return code. @see #SimpleCommandFailure

            
            @param encoding <None/str> - Default sys.getdefaultencoding(), the program's output will automatically be decoded using the provided codec (e.x. "utf-8" or "ascii").

                If None or False-ish, data will not be decoded (i.e. in python3 will be "bytes" type)

                If unsure, leave this as it's default value, or provide "utf-8"


            @return <str> - String of data output by the executed program. This combines stdout and stderr into one string. If you need them separate, use #runGetResults

            @raises SimpleCommandFailure - 

                * If command cannot be executed (like program not found, insufficient permissions, etc)

                * If #raiseOnFailure is set to True, and the program returns non-zero

def runGetOutput(cmd, raiseOnFailure=False, encoding=sys.getdefaultencoding()):
        '''
            runGetOutput - Simply runs a command and returns the output as a string. Use #runGetResults if you need something more complex.

            @param cmd <str/list> - String of command and arguments, or list of command and arguments

                If cmd is a string, the command will be executed as if ran exactly as written in a shell. This mode supports shell-isms like '&&' and '|'
                If cmd is a list, the first element will be the executable, and further elements are arguments that will be passed to that executable.


            @param raiseOnFailure <True/False> - Default False, if True a non-zero return from the command (failure) will raise a SimpleCommandFailure, which contains all gathered output and return code. @see #SimpleCommandFailure

            
            @param encoding <None/str> - Default sys.getdefaultencoding(), the program's output will automatically be decoded using the provided codec (e.x. "utf-8" or "ascii").

                If None or False-ish, data will not be decoded (i.e. in python3 will be "bytes" type)

                If unsure, leave this as it's default value, or provide "utf-8"


            @return <str> - String of data output by the executed program. This combines stdout and stderr into one string. If you need them separate, use #runGetResults

            @raises SimpleCommandFailure - 

                * If command cannot be executed (like program not found, insufficient permissions, etc)

                * If #raiseOnFailure is set to True, and the program returns non-zero

        '''


        
        results = Simple.runGetResults(cmd, stdout=True, stderr=subprocess.STDOUT, encoding=encoding)
        if raiseOnFailure is True and results['returnCode'] != 0:
            try:
                if issubclass(cmd.__class__, (list, tuple)):
                    cmdStr = ' '.join(cmd)
                else:
                    cmdStr = cmd
            except:
                cmdStr = repr(cmd)
                
            failMsg = "Command '%s' failed with returnCode=%d" %(cmdStr, results['returnCode'])
            raise SimpleCommandFailure(failMsg, results['returnCode'], results.get('stdout', None), results.get('stderr', None))
            

        return results['stdout']