aboutsummaryrefslogtreecommitdiffstats
path: root/experiment/executable/executable.py
diff options
context:
space:
mode:
authorJonathan Herman <hermanjl@cs.unc.edu>2012-11-26 17:06:27 -0500
committerJonathan Herman <hermanjl@cs.unc.edu>2012-11-26 17:06:27 -0500
commitb43b83beead92ff7cf28a5fe5a2710537268aae1 (patch)
treed9c29b14cd18a9df520f36d7e85eb460c30fa7a9 /experiment/executable/executable.py
parentcb8db5d30ee769304c2c2b00f2a7d9bcb3c4098f (diff)
Read locations of binary files from path instead of config.py.
Diffstat (limited to 'experiment/executable/executable.py')
-rw-r--r--experiment/executable/executable.py77
1 files changed, 0 insertions, 77 deletions
diff --git a/experiment/executable/executable.py b/experiment/executable/executable.py
deleted file mode 100644
index 628f711..0000000
--- a/experiment/executable/executable.py
+++ /dev/null
@@ -1,77 +0,0 @@
1import sys
2import subprocess
3import signal
4from ..litmus_util import is_executable
5
6class Executable(object):
7 '''Parent object that represents an executable for use in task-sets.'''
8
9 def __init__(self, exec_file, extra_args=None, stdout_file = None, stderr_file = None):
10 self.exec_file = exec_file
11 self.cwd = None
12 self.stdout_file = stdout_file
13 self.stderr_file = stderr_file
14 self.sp = None
15
16 if extra_args is None:
17 self.extra_args = None
18 else:
19 self.extra_args = list(extra_args) # make a duplicate
20
21 if not is_executable(self.exec_file):
22 raise Exception("Not executable ? : %s" % self.exec_file)
23
24 def __del__(self):
25 # Try and clean up
26 if self.stdout_file is not None:
27 self.stdout_file.close()
28 if self.stderr_file is not None:
29 self.stderr_file.close()
30
31 if self.sp is not None:
32 try:
33 self.sp.terminate()
34 except OSError as e:
35 if e.errno == 3:
36 pass # no such process (already killed), okay
37 else:
38 raise e
39
40 def __get_full_command(self):
41 full_command = [self.exec_file]
42 if self.extra_args is not None:
43 full_command += self.extra_args
44 return full_command
45
46 def __str__(self):
47 return " ".join(self.__get_full_command())
48
49 def execute(self):
50 '''Execute the binary.'''
51 full_command = self.__get_full_command()
52 self.sp = subprocess.Popen(full_command, stdout=self.stdout_file,
53 stderr=self.stderr_file, cwd=self.cwd)
54
55 def kill(self):
56 self.sp.kill()
57
58 def interrupt(self):
59 self.sp.send_signal(signal.SIGINT)
60
61 def terminate(self):
62 '''Send the terminate signal to the binary.'''
63 self.sp.terminate()
64
65 def wait(self):
66 '''Wait until the executable is finished, checking return code.
67
68 If the exit status is non-zero, raise an exception.
69
70 '''
71
72 self.sp.wait()
73 if self.sp.returncode != 0:
74 print >>sys.stderr, "Non-zero return: %s %s" % (self.exec_file, " ".join(self.extra_args))
75 return 0
76 else:
77 return 1