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]]
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)
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)
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__"]