'Starts the processor.'

def func(self):

    caller = self.caller
    args = self.args
    if (not args):
        caller.msg('Usage:    @batchcommands[/interactive]    <path.to.file>')
        return
    python_path = self.args
    try:
        commands = BATCHCMD.parse_file(python_path)
    except UnicodeDecodeError as err:
        caller.msg((_UTF8_ERROR % (python_path, err)))
        return
    except IOError as err:
        string = "'%s'    not    found.\nYou    have    to    supply    the    python    path\nusing    one    of    the    defined    batch-file    directories\n    (%s)."
        caller.msg((string % (python_path, ',    '.join(settings.BASE_BATCHPROCESS_PATHS))))
        return
    if (not commands):
        caller.msg(('File    %s    seems    empty    of    valid    commands.' % python_path))
        return
    switches = self.switches
    caller.ndb.batch_stack = commands
    caller.ndb.batch_stackptr = 0
    caller.ndb.batch_pythonpath = python_path
    caller.ndb.batch_batchmode = 'batch_commands'
    caller.ndb.batch_cmdset_backup = list(caller.cmdset.cmdset_stack)
    caller.cmdset.add(BatchSafeCmdSet)
    if (('inter' in switches) or ('interactive' in switches)):
        caller.cmdset.add(BatchInteractiveCmdSet)
        caller.msg(('\nBatch-command    processor    -    Interactive    mode    for    %s    ...' % python_path))
        show_curr(caller)
    else:
        caller.msg(('Running    Batch-command    processor    -    Automatic    mode    for    %s    (this    might    take    some    time)    ...' % python_path))
        procpool = False
        if ('PythonProcPool' in utils.server_services()):
            if utils.uses_database('sqlite3'):
                caller.msg('Batchprocessor    disabled    ProcPool    under    SQLite3.')
            else:
                procpool = True
        if procpool:
            def callback(r):
                caller.msg(("        |GBatchfile    '%s'    applied." % python_path))
                purge_processor(caller)
            def errback(e):
                caller.msg(("        |RError    from    processor:    '%s'" % e))
                purge_processor(caller)
            utils.run_async(_PROCPOOL_BATCHCMD_SOURCE, commands=commands, caller=caller, at_return=callback, at_err=errback)
        else:
            for _ in range(len(commands)):
                if (not batch_cmd_exec(caller)):
                    return
                step_pointer(caller, 1)
            string = ("        Batchfile    '%s'    applied." % python_path)
            caller.msg(('|G%s' % string))
            purge_processor(caller)
