Processes any commands within the scope that matches the inputted arguments.
    If a subcommand is found, then it is run, and the system exists with the 
    return value from the command.
    
    :param      argv    | [<str>, ..]
                scope   | <dict>
    
    :return     (<dict> options, <tuple> arguments)

def process(argv, scope, interface=None):
    """
    Processes any commands within the scope that matches the inputted arguments.
    If a subcommand is found, then it is run, and the system exists with the 
    return value from the command.
    
    :param      argv    | [<str>, ..]
                scope   | <dict>
    
    :return     (<dict> options, <tuple> arguments)
    """
    cmd = command(argv, scope)
    if cmd:
        sys.exit(cmd.run(argv))

    name = PROGRAM_NAME
    if interface:
        name = interface.name()

    _parser = parser(scope, '{0} [options] [<subcommand>] [<arg>]'.format(name))
    options, args = _parser.parse_args(argv)
    return options.__dict__, args