Bug 792135 - Part 1: Add which Python package; r=glandium
Version 1.1.0 obtained from https://code.google.com/p/which/ and added to tree without modifications aside from the removal of which.exe, which has no reason to be in the tree.
This commit is contained in:
83
python/which/test/testsupport.py
Normal file
83
python/which/test/testsupport.py
Normal file
@@ -0,0 +1,83 @@
|
||||
#!/usr/bin/env python
|
||||
# Copyright (c) 2002-2003 ActiveState Corp.
|
||||
# Author: Trent Mick (TrentM@ActiveState.com)
|
||||
|
||||
import os
|
||||
import sys
|
||||
import types
|
||||
|
||||
|
||||
#---- Support routines
|
||||
|
||||
def _escapeArg(arg):
|
||||
"""Escape the given command line argument for the shell."""
|
||||
#XXX There is a *lot* more that we should escape here.
|
||||
return arg.replace('"', r'\"')
|
||||
|
||||
|
||||
def _joinArgv(argv):
|
||||
r"""Join an arglist to a string appropriate for running.
|
||||
>>> import os
|
||||
>>> _joinArgv(['foo', 'bar "baz'])
|
||||
'foo "bar \\"baz"'
|
||||
"""
|
||||
cmdstr = ""
|
||||
for arg in argv:
|
||||
if ' ' in arg:
|
||||
cmdstr += '"%s"' % _escapeArg(arg)
|
||||
else:
|
||||
cmdstr += _escapeArg(arg)
|
||||
cmdstr += ' '
|
||||
if cmdstr.endswith(' '): cmdstr = cmdstr[:-1] # strip trailing space
|
||||
return cmdstr
|
||||
|
||||
|
||||
def run(argv):
|
||||
"""Prepare and run the given arg vector, 'argv', and return the
|
||||
results. Returns (<stdout lines>, <stderr lines>, <return value>).
|
||||
Note: 'argv' may also just be the command string.
|
||||
"""
|
||||
if type(argv) in (types.ListType, types.TupleType):
|
||||
cmd = _joinArgv(argv)
|
||||
else:
|
||||
cmd = argv
|
||||
if sys.platform.startswith('win'):
|
||||
i, o, e = os.popen3(cmd)
|
||||
output = o.read()
|
||||
error = e.read()
|
||||
i.close()
|
||||
e.close()
|
||||
try:
|
||||
retval = o.close()
|
||||
except IOError:
|
||||
# IOError is raised iff the spawned app returns -1. Go
|
||||
# figure.
|
||||
retval = -1
|
||||
if retval is None:
|
||||
retval = 0
|
||||
else:
|
||||
import popen2
|
||||
p = popen2.Popen3(cmd, 1)
|
||||
i, o, e = p.tochild, p.fromchild, p.childerr
|
||||
output = o.read()
|
||||
error = e.read()
|
||||
i.close()
|
||||
o.close()
|
||||
e.close()
|
||||
retval = (p.wait() & 0xFF00) >> 8
|
||||
if retval > 2**7: # 8-bit signed 1's-complement conversion
|
||||
retval -= 2**8
|
||||
return output, error, retval
|
||||
|
||||
|
||||
def _rmtreeOnError(rmFunction, filePath, excInfo):
|
||||
if excInfo[0] == OSError:
|
||||
# presuming because file is read-only
|
||||
os.chmod(filePath, 0777)
|
||||
rmFunction(filePath)
|
||||
|
||||
def rmtree(dirname):
|
||||
import shutil
|
||||
shutil.rmtree(dirname, 0, _rmtreeOnError)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user