aboutsummaryrefslogtreecommitdiffstats
path: root/common.py
diff options
context:
space:
mode:
authorJonathan Herman <hermanjl@cs.unc.edu>2013-04-10 14:35:37 -0400
committerJonathan Herman <hermanjl@cs.unc.edu>2013-04-10 14:35:37 -0400
commit4162cc0c57de22566efa6e2dab224909279f2a47 (patch)
treea8628096c4161e658c385b07b026371a2ef5e3c4 /common.py
parent37a410ab7d4ba991a075a3b2f4d24a656f4544ca (diff)
run_exps will run any command whose last argument is the duration.
Diffstat (limited to 'common.py')
-rw-r--r--common.py47
1 files changed, 25 insertions, 22 deletions
diff --git a/common.py b/common.py
index 66df7bb..4920ec8 100644
--- a/common.py
+++ b/common.py
@@ -7,29 +7,34 @@ import sys
7from collections import defaultdict 7from collections import defaultdict
8from textwrap import dedent 8from textwrap import dedent
9 9
10def get_executable(prog, hint='unknown', optional=False): 10def get_executable(prog, cwd="."):
11 '''Search for @prog in system PATH. Print @hint if no binary is found.''' 11 '''Search for @prog in system PATH and @cwd.'''
12 12
13 def is_exe(fpath): 13 cwd_path = "%s/%s" % (cwd, prog)
14 return os.path.isfile(fpath) and os.access(fpath, os.X_OK) 14 if is_executable(cwd_path):
15 15 return cwd_path
16 fpath, fname = os.path.split(prog)
17 if fpath:
18 if is_exe(prog):
19 return prog
20 else: 16 else:
21 for path in os.environ["PATH"].split(os.pathsep): 17 for path in os.environ["PATH"].split(os.pathsep):
22 exe_file = os.path.join(path, prog) 18 exe_file = os.path.join(path, prog)
23 if is_exe(exe_file): 19 if is_executable(exe_file):
24 return exe_file 20 return exe_file
25 21
26 if not optional: 22 full_cwd = os.path.abspath(cwd)
27 sys.stderr.write("Cannot find executable '%s' in PATH. This is a part " 23 raise IOError("Cannot find executable '%s'! (cwd='%s')" % (prog, full_cwd))
28 "of '%s' which should be added to PATH to run.\n" % 24
29 (prog, hint)) 25def get_executable_hint(prog, hint, optional=False):
30 sys.exit(1) 26 '''Search for @prog in system PATH. Print @hint if no binary is found.
31 else: 27 Die if not @optional.'''
32 return None 28 try:
29 prog = get_executable(prog)
30 except IOError:
31 if not optional:
32 sys.stderr.write(("Cannot find executable '%s' in PATH. This is " +\
33 "a part of '%s' which should be added to PATH.\n")\
34 % (prog, hint))
35 sys.exit(1)
36
37 return prog
33 38
34def get_config_option(option): 39def get_config_option(option):
35 '''Search for @option in installed kernel config (if present). 40 '''Search for @option in installed kernel config (if present).
@@ -174,14 +179,12 @@ def ft_freq():
174 return freq 179 return freq
175 180
176 181
177def uname_matches(reg): 182def kernel():
178 data = subprocess.check_output(["uname", "-r"]) 183 return subprocess.check_output(["uname", "-r"])
179 return bool( re.match(reg, data) )
180 184
181def is_executable(fname): 185def is_executable(fname):
182 '''Return whether the file passed in is executable''' 186 '''Return whether the file passed in is executable'''
183 mode = os.stat(fname)[stat.ST_MODE] 187 return os.path.isfile(fname) and os.access(fname, os.X_OK)
184 return mode & stat.S_IXUSR and mode & stat.S_IRUSR
185 188
186def is_device(dev): 189def is_device(dev):
187 if not os.path.exists(dev): 190 if not os.path.exists(dev):