@autokwoargs
def run(args=None, catch=(), exit=True, out=None, err=None, *fn, **kwargs):
    if len(fn) == 1:
        fn = fn[0]
    cli = Clize.get_cli(fn, **kwargs)

    if args is None:
        # import __main__ causes double imports when
        # python2.7 -m apackage
        # is used
        module = sys.modules['__main__']
        args = fix_argv(sys.argv, sys.path, module)
    if out is None:
        out = sys.stdout
    if err is None:
        err = sys.stderr

    try:
        ret = cli(*args)
    except tuple(catch) + (errors.UserError,) as exc:
        print(str(exc), file=err)
        if exit:
            sys.exit(2 if isinstance(exc, errors.ArgumentError) else 1)
    else:
        if ret is not None:
            print(ret, file=out)
        if exit:
            sys.exit()
Runs a function or :ref:`CLI object<cli-object>` with ``args``, prints
dataset/ETHPy150Open epsy/clize/clize/runner.py/run