| 628 | __all__.extend(["execl","execle","execlp","execlpe","execvp","execvpe"]) |
| 629 | |
| 630 | def _execvpe(file, args, env=None): |
| 631 | if env is not None: |
| 632 | exec_func = execve |
| 633 | argrest = (args, env) |
| 634 | else: |
| 635 | exec_func = execv |
| 636 | argrest = (args,) |
| 637 | env = environ |
| 638 | |
| 639 | if path.dirname(file): |
| 640 | exec_func(file, *argrest) |
| 641 | return |
| 642 | saved_exc = None |
| 643 | path_list = get_exec_path(env) |
| 644 | if name != 'nt': |
| 645 | file = fsencode(file) |
| 646 | path_list = map(fsencode, path_list) |
| 647 | for dir in path_list: |
| 648 | fullname = path.join(dir, file) |
| 649 | try: |
| 650 | exec_func(fullname, *argrest) |
| 651 | except (FileNotFoundError, NotADirectoryError) as e: |
| 652 | last_exc = e |
| 653 | except OSError as e: |
| 654 | last_exc = e |
| 655 | if saved_exc is None: |
| 656 | saved_exc = e |
| 657 | if saved_exc is not None: |
| 658 | raise saved_exc |
| 659 | raise last_exc |
| 660 | |
| 661 | |
| 662 | def get_exec_path(env=None): |