1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
# 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 ':')
# - os.pathsep is the component separator used in $PATH etc
# - os.defpath is the default search path for executables
# 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).
_osindex = {
'posix': ('.', '..', '/', ':', ':/bin:/usr/bin'),
'dos': ('.', '..', '\\', ';', '.;C:\\bin'),
'nt': ('.', '..', '\\', ';', '.;C:\\bin'),
'mac': (':', '::', ':', '\n', ':'),
}
# For freeze.py script:
if 0:
import posix
import posixpath
import sys
for name in _osindex.keys():
if name in sys.builtin_module_names:
curdir, pardir, sep, pathsep, defpath = _osindex[name]
exec 'from %s import *' % name
exec 'import %spath' % name
exec 'path = %spath' % name
exec 'del %spath' % name
try:
exec 'from %s import _exit' % name
except ImportError:
pass
try:
environ
except:
environ = {} # Make sure os.environ exists, at least
break
else:
del name
raise ImportError, 'no os specific module found'
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 execlpe(file, *args):
env = args[-1]
execvpe(file, args[:-1], env)
def execvp(file, args):
_execvpe(file, args)
def execvpe(file, args, env):
_execvpe(file, args, env)
_notfound = None
def _execvpe(file, args, env = None):
if env:
func = execve
argrest = (args, env)
else:
func = execv
argrest = (args,)
env = environ
global _notfound
head, tail = path.split(file)
if head:
apply(func, (file,) + argrest)
return
if env.has_key('PATH'):
envpath = env['PATH']
else:
envpath = defpath
import string
PATH = string.splitfields(envpath, pathsep)
if not _notfound:
import tempfile
# Exec a file that is guaranteed not to exist
try: execv(tempfile.mktemp(), ())
except error, _notfound: pass
exc, arg = error, _notfound
for dir in PATH:
fullname = path.join(dir, file)
try:
apply(func, (fullname,) + argrest)
except error, (errno, msg):
if errno != arg[0]:
exc, arg = error, (errno, msg)
raise exc, arg
# Provide listdir for Windows NT that doesn't have it built in
if name == 'nt':
try:
_tmp = listdir
del _tmp
except NameError:
def listdir(name):
if path.ismount(name):
list = ['.']
else:
list = ['.', '..']
f = popen('dir/l/b ' + name, 'r')
line = f.readline()
while line:
list.append(line[:-1])
line = f.readline()
return list
# Change environ to automatically call putenv() if it exists
try:
_putenv = putenv
except NameError:
_putenv = None
if _putenv:
import UserDict
class _Environ(UserDict.UserDict):
def __init__(self, environ):
UserDict.UserDict.__init__(self)
self.data = environ
def __setitem__(self, key, item):
putenv(key, item)
self.data[key] = item
environ = _Environ(environ)
|