# 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