def cli() -> ExitCode: """Entry point from command line""" try: hide_cursor() parser = get_command_parser() argcomplete.autocomplete(parser) parsed_pipx_args = parser.parse_args() setup(parsed_pipx_args) check_args(parsed_pipx_args) if not parsed_pipx_args.command: parser.print_help() return ExitCode(1) return run_pipx_command(parsed_pipx_args) except PipxError as e: print(str(e), file=sys.stderr) logger.debug(f"PipxError: {e}", exc_info=True) return ExitCode(1) except KeyboardInterrupt: return ExitCode(1) except Exception: logger.debug("Uncaught Exception:", exc_info=True) raise finally: logger.debug("pipx finished.") show_cursor()
def exec_app(cmd: Sequence[Union[str, Path]], env: Dict[str, str] = None) -> None: """Run command, do not return POSIX: replace current processs with command using os.exec*() Windows: Use subprocess and sys.exit() to run command """ if env is None: env = dict(os.environ) env = _fix_subprocess_env(env) # make sure we show cursor again before handing over control show_cursor() sys.stderr.flush() logging.info("exec_app: " + " ".join([str(c) for c in cmd])) if WINDOWS: sys.exit( subprocess.run( cmd, env=env, stdout=None, stderr=None, encoding="utf-8", universal_newlines=True, ).returncode) else: os.execvpe(str(cmd[0]), [str(x) for x in cmd], env)
def exec_app( cmd: Sequence[Union[str, Path]], env: Optional[Dict[str, str]] = None, extra_python_paths: Optional[List[str]] = None, ) -> NoReturn: """Run command, do not return POSIX: replace current processs with command using os.exec*() Windows: Use subprocess and sys.exit() to run command """ if env is None: env = dict(os.environ) env = _fix_subprocess_env(env) if extra_python_paths is not None: env["PYTHONPATH"] = os.path.pathsep.join( extra_python_paths + ( os.getenv("PYTHONPATH", "").split(os.path.pathsep) if os.getenv("PYTHONPATH") else [] ) ) # make sure we show cursor again before handing over control show_cursor() logger.info("exec_app: " + " ".join([str(c) for c in cmd])) if WINDOWS: sys.exit( subprocess.run( cmd, env=env, stdout=None, stderr=None, encoding="utf-8", universal_newlines=True, ).returncode ) else: os.execvpe(str(cmd[0]), [str(x) for x in cmd], env)