summaryrefslogtreecommitdiffstats
path: root/scripts/lib/wic/misc.py
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/lib/wic/misc.py')
-rw-r--r--scripts/lib/wic/misc.py39
1 files changed, 36 insertions, 3 deletions
diff --git a/scripts/lib/wic/misc.py b/scripts/lib/wic/misc.py
index 8a38f2f479..3ebae0a6e0 100644
--- a/scripts/lib/wic/misc.py
+++ b/scripts/lib/wic/misc.py
@@ -29,12 +29,12 @@
29import logging 29import logging
30import os 30import os
31import re 31import re
32import subprocess
32 33
33from collections import defaultdict 34from collections import defaultdict
34from distutils import spawn 35from distutils import spawn
35 36
36from wic import WicError 37from wic import WicError
37from wic.utils import runner
38 38
39logger = logging.getLogger('wic') 39logger = logging.getLogger('wic')
40 40
@@ -59,6 +59,39 @@ NATIVE_RECIPES = {"bmaptool": "bmap-tools",
59 "syslinux": "syslinux" 59 "syslinux": "syslinux"
60 } 60 }
61 61
62def runtool(cmdln_or_args):
63 """ wrapper for most of the subprocess calls
64 input:
65 cmdln_or_args: can be both args and cmdln str (shell=True)
66 return:
67 rc, output
68 """
69 if isinstance(cmdln_or_args, list):
70 cmd = cmdln_or_args[0]
71 shell = False
72 else:
73 import shlex
74 cmd = shlex.split(cmdln_or_args)[0]
75 shell = True
76
77 sout = subprocess.PIPE
78 serr = subprocess.STDOUT
79
80 try:
81 process = subprocess.Popen(cmdln_or_args, stdout=sout,
82 stderr=serr, shell=shell)
83 sout, serr = process.communicate()
84 # combine stdout and stderr, filter None out and decode
85 out = ''.join([out.decode('utf-8') for out in [sout, serr] if out])
86 except OSError as err:
87 if err.errno == 2:
88 # [Errno 2] No such file or directory
89 raise WicError('Cannot run command: %s, lost dependency?' % cmd)
90 else:
91 raise # relay
92
93 return process.returncode, out
94
62def _exec_cmd(cmd_and_args, as_shell=False): 95def _exec_cmd(cmd_and_args, as_shell=False):
63 """ 96 """
64 Execute command, catching stderr, stdout 97 Execute command, catching stderr, stdout
@@ -70,9 +103,9 @@ def _exec_cmd(cmd_and_args, as_shell=False):
70 logger.debug(args) 103 logger.debug(args)
71 104
72 if as_shell: 105 if as_shell:
73 ret, out = runner.runtool(cmd_and_args) 106 ret, out = runtool(cmd_and_args)
74 else: 107 else:
75 ret, out = runner.runtool(args) 108 ret, out = runtool(args)
76 out = out.strip() 109 out = out.strip()
77 if ret != 0: 110 if ret != 0:
78 raise WicError("_exec_cmd: %s returned '%s' instead of 0\noutput: %s" % \ 111 raise WicError("_exec_cmd: %s returned '%s' instead of 0\noutput: %s" % \