Enable runcmd to use a list for the command, and have it quote elements as needed.

This commit is contained in:
Robin Dunn
2016-07-22 14:28:00 -07:00
parent 5e8f4b1264
commit 648e5789fc
2 changed files with 29 additions and 8 deletions

View File

@@ -231,16 +231,17 @@ def setPythonVersion(args):
else:
PYTHON = args[idx+1]
del args[idx:idx+2]
PYVER = runcmd('"%s" -c "import sys; print(sys.version[:3])"' % PYTHON,
getOutput=True, echoCmd=False)
PYVER = runcmd([PYTHON, '-c', 'import sys; print(sys.version[:3])'],
getOutput=True, echoCmd=True)
msg("PYVER: {!r}".format(PYVER))
PYSHORTVER = PYVER[0] + PYVER[2]
break
if havePyVer:
if isWindows and os.environ.get('TOOLS'):
# Use $TOOLS to find the correct Python. It should be the install
# root of all Python's on the system, with the 64-bit ones in an
# amd64 subfolder, like this:
# Use $TOOLS to find the correct Python. If set then it should be
# the install root of all Python's on the system, with the 64-bit
# ones in an amd64 subfolder, like this:
#
# $TOOLS\Python27\python.exe
# $TOOLS\Python33\python.exe
@@ -284,9 +285,11 @@ def setPythonVersion(args):
PYTHON = os.path.abspath(PYTHON)
msg('Build using: "%s"' % PYTHON)
msg(runcmd('"%s" -c "import sys; print(sys.version)"' % PYTHON, True, False))
PYTHON_ARCH = runcmd('"%s" -c "import platform; print(platform.architecture()[0])"'
% PYTHON, True, False)
msg(runcmd([PYTHON, '-c', 'import sys; print(sys.version)'], True, False))
PYTHON_ARCH = runcmd(
[PYTHON, '-c', 'import platform; print(platform.architecture()[0])'],
True, False)
msg('Python\'s architecture is %s' % PYTHON_ARCH)
os.environ['PYTHON'] = PYTHON

View File

@@ -781,6 +781,24 @@ def getVcsRev():
def runcmd(cmd, getOutput=False, echoCmd=True, fatal=True):
"""
Runs a give command-line command, optionally returning the output.
"""
if isinstance(cmd, list):
# add quotes to elements of the command that need it
cmd = cmd[:]
for idx, item in enumerate(cmd):
if ' ' in item or ';' in item:
if item[0] not in ['"', "'"]:
if '"' in item:
item = item.replace('"', '\\"')
item = '"{}"'.format(item)
cmd[idx] = item
cmd = ' '.join(cmd)
#if echoCmd:
# msg(' '.join(cmd))
if echoCmd:
msg(cmd)