Пример #1
0
def main():
    command = sys.argv[1:]
    if len(command) == 0:
        command = []
        for arg in list(pyto.EditorViewController.parseArguments(input("python -m "))):
            command.append(str(arg))
    if len(command) == 0:
        print(usage)
        return
    module_name = command[0]

    try:
        del sys.modules[module_name]
    except KeyError:
        pass
    
    bin = os.path.expanduser("~/Documents/stash_extensions/bin")
    sys.path.insert(-1, bin)

    sys.argv = command

    __clear_mods__()

    try:
        runpy._run_module_as_main(module_name)
    except KeyboardInterrupt:
        pass
    except SystemExit:
        pass
    except:
        print(traceback.format_exc())

    sys.argv = [sys.argv[0]]
Пример #2
0
def main():
    if len(sys.argv) == 1:
        if sys.stdin.isatty():
            repl_main()
        else:
            exec(sys.stdin.read())
        return

    __clear_mods__()

    if sys.argv[1] == "-u":
        del sys.argv[1]

    if sys.argv[1] == "-c":
        try:
            _code = sys.argv[
                2]  # python -c "import sys; print(sys.argv)" foo bar
            sys.argv.pop(0)  # -c "import sys; print(sys.argv)" foo bar
            sys.argv.pop(0)  # "import sys; print(sys.argv)" foo bar
            sys.argv[0] = "-c"  # -c foo bar
        except IndexError:
            print(_usage, file=sys.stderr)
            sys.exit(1)

        exec(_code)
    elif sys.argv[1] == "-m":
        try:
            sys.argv.pop(0)
            sys.argv.pop(0)

            for mod in list(sys.modules.keys()):
                if mod.startswith(sys.argv[0]):
                    del sys.modules[mod]
        except IndexError:
            print(_usage, file=sys.stderr)
            sys.exit(1)

        runpy.run_module(sys.argv[0], run_name="__main__")

    elif sys.argv[1] == "-h" or sys.argv[1] == "--help":
        print(_usage, file=sys.stderr)
        sys.exit(1)

    else:

        sys.argv.pop(0)

        try:
            with Path(sys.path + [os.path.dirname(sys.argv[0])]):
                runpy.run_path(sys.argv[0], run_name="__main__")
        except Exception as e:
            tb.print_exc()
            sys.exit(1)
Пример #3
0
def _main_function_no_one_calls_a_function_like_that():
    command = sys.argv[1:]
    if len(command) == 0:
        command = []
        args = shlex.split(input("python -m "))
        for arg in args:
            command.append(str(arg))
    if len(command) == 0:
        print(usage)
        return
    module_name = command[0]

    try:
        del sys.modules[module_name]
    except KeyError:
        pass

    bin = os.path.expanduser("~/Documents/stash_extensions/bin")
    if not bin in sys.path:
        sys.path.insert(-1, bin)

    sys.argv = command

    __clear_mods__()

    try:
        try:
            sys.modules["__main__"]
        except KeyError:
            sys.modules["__main__"] = pyto
        runpy._run_module_as_main(module_name)
    except KeyboardInterrupt:
        pass
    except SystemExit:
        pass
    except:
        print(traceback.format_exc())

    sys.argv = [sys.argv[0]]

    if bin in sys.path:
        sys.path.remove(bin)
Пример #4
0
def parse_args(comp: list[str], name: str, _stdout=None, _stdin=None):

    comp = list(map(os.path.expanduser, comp))
    comp = list(map(os.path.expandvars, comp))

    new_comp = []
    for arg in comp:
        arg = arg.replace("$ESCAPED_ARROW_RIGHT$", ">")
        arg = arg.replace("$ESCAPED_ARROW_LEFT$", "<")

        if "$ESCAPED_GLOB$" in arg:
            new_comp.append(arg.replace("$ESCAPED_GLOB$", "*"))
            continue

        files = glob.glob(arg)
        if len(files) > 0:
            new_comp += files
        else:
            new_comp.append(arg)

    comp = []

    stdout_path = None
    stdout_mode = None

    stdin_path = None

    i = 0
    ignore_index = None
    for arg in new_comp:
        if ignore_index is not None and ignore_index == i:
            i += 1
            ignore_index = None
            continue

        if arg == ">" or arg == ">>":
            try:
                stdout_path = new_comp[i + 1]
                if arg == ">":
                    stdout_mode = "w+"
                elif arg == ">>":
                    stdout_mode = "a+"

                ignore_index = i + 1
                i += 1
                continue
            except IndexError:
                msg = "no stdout file specified"
                raise IndexError(msg)

        if arg == "<":
            try:
                stdin_path = new_comp[i + 1]
                ignore_index = i + 1
                i += 1
                continue
            except IndexError:
                msg = "no stdout file specified"
                raise IndexError(msg)

        comp.append(arg)
        i += 1

    try:
        prog = comp[0]
    except IndexError:
        return

    _dict = None

    __clear_mods__()

    scripts = get_scripts()

    def run_binary(path):
        with open(path, "r") as f:
            _dict = {"__name__": name, "__file__": path}
            if name == "__main__":
                try:
                    code = f.read()
                    exec(code, _dict, {})
                finally:
                    return _dict
            else:
                return _dict

    og_stdout = sys.stdout
    if stdout_path is not None:
        stdout = open(stdout_path, stdout_mode)
    elif _stdout is not None:
        stdout = _stdout
    else:
        stdout = sys.stdout

    og_stdin = sys.stdin
    if stdin_path is not None:
        stdin = open(stdin_path, "r")
    elif _stdin is not None:
        stdin = _stdin
    else:
        stdin = sys.stdin

    sys.stdout = stdout
    sys.stdin = stdin
    try:
        with Arguments(comp) as _:
            script_path = os.path.join(
                os.path.dirname(os.path.abspath(__file__)), "bin",
                prog + ".py")
            documents_bin_script_path = os.path.join(
                os.path.expanduser("~/Documents/bin"), prog + ".py")
            binary_path = os.path.join(os.path.expanduser("~/Documents/bin"),
                                       prog)
            if os.path.isfile(script_path):
                with Path(sys.path + [os.path.dirname(script_path)]) as _:
                    _dict = runpy.run_path(script_path, run_name=name)
            elif os.path.isfile(documents_bin_script_path):
                with Path(sys.path +
                          [os.path.dirname(documents_bin_script_path)]) as _:
                    _dict = runpy.run_path(documents_bin_script_path,
                                           run_name=name)
            elif prog in scripts:
                _dict = run_binary(scripts[prog])
            elif prog + ".py" in scripts:
                _dict = run_binary(scripts[prog])
            elif os.path.isfile(binary_path):
                _dict = run_binary(binary_path)
            elif prog in which.commands:
                return Popen(comp)
            else:
                print(f"{prog}: command not found", file=sys.stderr)
                sys.exit(1)
    finally:
        sys.stdout = og_stdout
        sys.stdin = og_stdin
        if stdout_path is not None:
            stdout.close()
        if stdin_path is not None:
            stdin.close()

    for key in list(sys.modules.keys()):
        if key.startswith("setuptools") or key.startswith(
                "distutils") or key.startswith("_distutils"):
            del sys.modules[key]

    if _dict is not None and "__file__" in _dict:
        return _dict["__file__"]