| # os.py -- either mac, dos or posix depending on what system we're on. |
| |
| # This exports: |
| # - all functions from either posix or mac, e.g., os.unlink, os.stat, etc. |
| # - os.path is either module posixpath or macpath |
| # - os.name is either 'posix' or 'mac' |
| # - os.curdir is a string representing the current directory ('.' or ':') |
| # - os.pardir is a string representing the parent directory ('..' or '::') |
| # - os.sep is the (or a most common) pathname separator ('/' or ':') |
| |
| # Programs that import and use 'os' stand a better chance of being |
| # portable between different platforms. Of course, they must then |
| # only use functions that are defined by all platforms (e.g., unlink |
| # and opendir), and leave all pathname manipulation to os.path |
| # (e.g., split and join). |
| |
| # XXX This is incorrect if the import *path fails... |
| |
| try: |
| from posix import * |
| try: |
| from posix import _exit |
| except ImportError: |
| pass |
| name = 'posix' |
| curdir = '.' |
| pardir = '..' |
| sep = '/' |
| import posixpath |
| path = posixpath |
| del posixpath |
| except ImportError: |
| try: |
| from mac import * |
| name = 'mac' |
| curdir = ':' |
| pardir = '::' |
| sep = ':' |
| import macpath |
| path = macpath |
| del macpath |
| except ImportError: |
| from dos import * |
| name = 'dos' |
| curdir = '.' # XXX doesn't always work |
| pardir = '..' # XXX doesn't always work |
| sep = '/' # XXX or '\\' ??? |
| import dospath |
| path = dospath |
| del dospath |
| |
| def execl(file, *args): |
| execv(file, args) |
| |
| def execle(file, *args): |
| env = args[-1] |
| execve(file, args[:-1], env) |
| |
| def execlp(file, *args): |
| execvp(file, args) |
| |
| def execvp(file, args): |
| if '/' in file: |
| execv(file, args) |
| return |
| ENOENT = 2 |
| if environ.has_key('PATH'): |
| import string |
| PATH = string.splitfields(environ['PATH'], ':') |
| else: |
| PATH = ['', '/bin', '/usr/bin'] |
| exc, arg = (ENOENT, 'No such file or directory') |
| for dir in PATH: |
| fullname = path.join(dir, file) |
| try: |
| execv(fullname, args) |
| except error, (errno, msg): |
| if errno != ENOENT: |
| exc, arg = error, (errno, msg) |
| raise exc, arg |