(self, python_args)
| 614 | return result |
| 615 | |
| 616 | def _execute(self, python_args): |
| 617 | # type: (Sequence[str]) -> Any |
| 618 | force_interpreter = self._vars.PEX_INTERPRETER |
| 619 | |
| 620 | self._clean_environment(strip_pex_env=self._pex_info.strip_pex_env) |
| 621 | |
| 622 | for name, value in self._pex_info.inject_env.items(): |
| 623 | os.environ.setdefault(name, value) |
| 624 | |
| 625 | for name, resource in self._pex_info.bind_resource_paths.items(): |
| 626 | os.environ[name] = self._resolve_resource_path(name, resource) |
| 627 | |
| 628 | replacements = Namespace(env=Namespace(os.environ, safe=True)) |
| 629 | |
| 630 | if force_interpreter: |
| 631 | TRACER.log("PEX_INTERPRETER specified, dropping into interpreter") |
| 632 | return self.execute_interpreter(python_args) |
| 633 | |
| 634 | if not any( |
| 635 | ( |
| 636 | self._pex_info_overrides.script, |
| 637 | self._pex_info_overrides.entry_point, |
| 638 | self._pex_info.script, |
| 639 | self._pex_info.entry_point, |
| 640 | ) |
| 641 | ): |
| 642 | TRACER.log("No entry point specified, dropping into interpreter") |
| 643 | return self.execute_interpreter(python_args) |
| 644 | |
| 645 | if self._pex_info_overrides.script and self._pex_info_overrides.entry_point: |
| 646 | return "Cannot specify both script and entry_point for a PEX!" |
| 647 | |
| 648 | if self._pex_info.script and self._pex_info.entry_point: |
| 649 | return "Cannot specify both script and entry_point for a PEX!" |
| 650 | |
| 651 | if self._pex_info_overrides.script: |
| 652 | return self.execute_script(self._pex_info_overrides.script) |
| 653 | if self._pex_info_overrides.entry_point: |
| 654 | return self.execute_entry(parse_entry_point(self._pex_info_overrides.entry_point)) |
| 655 | |
| 656 | sys.argv[1:1] = [arg.format(pex=replacements) for arg in self._pex_info.inject_args] |
| 657 | |
| 658 | if self._pex_info.script: |
| 659 | return self.execute_script(self._pex_info.script) |
| 660 | else: |
| 661 | # N.B.: We tested one of script or entry_point in pex_info or overrides was non-empty |
| 662 | # above; so this just satisfies type checking. |
| 663 | assert self._pex_info.entry_point |
| 664 | return self.execute_entry(parse_entry_point(self._pex_info.entry_point)) |
| 665 | |
| 666 | def execute_interpreter(self, python_args): |
| 667 | # type: (Sequence[str]) -> Any |
nothing calls this directly
no test coverage detected