| 585 | __all__.extend(["execl","execle","execlp","execlpe","execvp","execvpe"]) |
| 586 | |
| 587 | def _execvpe(file, args, env=None): |
| 588 | if env is not None: |
| 589 | exec_func = execve |
| 590 | argrest = (args, env) |
| 591 | else: |
| 592 | exec_func = execv |
| 593 | argrest = (args,) |
| 594 | env = environ |
| 595 | |
| 596 | if path.dirname(file): |
| 597 | exec_func(file, *argrest) |
| 598 | return |
| 599 | saved_exc = None |
| 600 | path_list = get_exec_path(env) |
| 601 | if name != 'nt': |
| 602 | file = fsencode(file) |
| 603 | path_list = map(fsencode, path_list) |
| 604 | for dir in path_list: |
| 605 | fullname = path.join(dir, file) |
| 606 | try: |
| 607 | exec_func(fullname, *argrest) |
| 608 | except (FileNotFoundError, NotADirectoryError) as e: |
| 609 | last_exc = e |
| 610 | except OSError as e: |
| 611 | last_exc = e |
| 612 | if saved_exc is None: |
| 613 | saved_exc = e |
| 614 | if saved_exc is not None: |
| 615 | raise saved_exc |
| 616 | raise last_exc |
| 617 | |
| 618 | |
| 619 | def get_exec_path(env=None): |