summaryrefslogtreecommitdiffstats
path: root/Lib/distutils/spawn.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/distutils/spawn.py')
-rw-r--r--Lib/distutils/spawn.py31
1 files changed, 30 insertions, 1 deletions
diff --git a/Lib/distutils/spawn.py b/Lib/distutils/spawn.py
index 07dc814..5b6016e 100644
--- a/Lib/distutils/spawn.py
+++ b/Lib/distutils/spawn.py
@@ -38,6 +38,8 @@ def spawn (cmd,
_spawn_posix(cmd, search_path, verbose, dry_run)
elif os.name == 'nt':
_spawn_nt(cmd, search_path, verbose, dry_run)
+ elif os.name == 'os2':
+ _spawn_os2(cmd, search_path, verbose, dry_run)
else:
raise DistutilsPlatformError, \
"don't know how to spawn programs on platform '%s'" % os.name
@@ -88,6 +90,33 @@ def _spawn_nt (cmd,
"command '%s' failed with exit status %d" % (cmd[0], rc)
+def _spawn_os2 (cmd,
+ search_path=1,
+ verbose=0,
+ dry_run=0):
+
+ executable = cmd[0]
+ #cmd = _nt_quote_args(cmd)
+ if search_path:
+ # either we find one or it stays the same
+ executable = find_executable(executable) or executable
+ if verbose:
+ print string.join([executable] + cmd[1:], ' ')
+ if not dry_run:
+ # spawnv for OS/2 EMX requires a full path to the .exe
+ try:
+ rc = os.spawnv(os.P_WAIT, executable, cmd)
+ except OSError, exc:
+ # this seems to happen when the command isn't found
+ raise DistutilsExecError, \
+ "command '%s' failed: %s" % (cmd[0], exc[-1])
+ if rc != 0:
+ # and this reflects the command running but failing
+ print "command '%s' failed with exit status %d" % (cmd[0], rc)
+ raise DistutilsExecError, \
+ "command '%s' failed with exit status %d" % (cmd[0], rc)
+
+
def _spawn_posix (cmd,
search_path=1,
verbose=0,
@@ -154,7 +183,7 @@ def find_executable(executable, path=None):
path = os.environ['PATH']
paths = string.split(path, os.pathsep)
(base, ext) = os.path.splitext(executable)
- if (sys.platform == 'win32') and (ext != '.exe'):
+ if (sys.platform == 'win32' or os.name == 'os2') and (ext != '.exe'):
executable = executable + '.exe'
if not os.path.isfile(executable):
for p in paths: