Changes in / [6e7b969:cde1bf9]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
benchmark/rmit.py
r6e7b969 rcde1bf9 38 38 self.vars = re.findall("[a-zA-Z]", value) 39 39 40 def parse_option(opt): 41 match = re.search("^(.*):(.*)$", opt) 42 if not match : 43 print('ERROR: extra options should match pattern .*:.*, got {}'.format(opt), file=sys.stderr) 44 sys.exit(1) 45 46 key = match.group(1) 47 values = match.group(2) 48 40 def parse_option(key, values): 49 41 try: 50 42 num = int(values) … … 121 113 parser = argparse.ArgumentParser(description='Python Script to implement R.M.I.T. testing : Randomized Multiple Interleaved Trials') 122 114 parser.add_argument('--list', help='List all the commands that would be run', action='store_true') 123 parser.add_argument('--format', help='How to print the result', choices=formats, default='json')124 115 parser.add_argument('--file', nargs='?', type=argparse.FileType('w'), default=sys.stdout) 125 parser.add_argument('-t', '--trials', help='Number of trials to run per combinaison', type=int, default=3) 126 parser.add_argument('-o','--option',action='append') 116 parser.add_argument('--trials', help='Number of trials to run per combinaison', type=int, default=3) 127 117 parser.add_argument('command', metavar='command', type=str, nargs=1, help='the command prefix to run') 128 118 parser.add_argument('candidates', metavar='candidates', type=str, nargs='*', help='the candidate suffix to run') 129 119 130 120 try: 131 options = parser.parse_args() 121 options, unknown = parser.parse_known_args() 122 123 options.option = [] 124 while unknown: 125 key = unknown.pop(0) 126 val = unknown.pop(0) 127 128 if key[0] != '-': 129 raise ValueError 130 131 options.option.append((key[1:], val)) 132 132 133 except: 133 134 print('ERROR: invalid arguments', file=sys.stderr) … … 150 151 # ================================================================================ 151 152 # Identify the options to run 152 opts = dict([parse_option( o) for oin options.option])153 opts = dict([parse_option(k, v) for k, v in options.option]) 153 154 154 155 # Evaluate the options (options can depend on the value of other options) … … 177 178 # find expected time 178 179 time = actions_eta(actions) 179 print("Running {} trials{}".format(len(actions), "" if time == 0 else " (expecting to take {} ".format(str(datetime.timedelta(seconds=int(time)))) ))180 print("Running {} trials{}".format(len(actions), "" if time == 0 else " (expecting to take {})".format(str(datetime.timedelta(seconds=int(time)))) )) 180 181 181 182 random.shuffle(actions) 182 result = []183 183 184 184 # ================================================================================ 185 185 # Run 186 options.file.write("[") 187 first = True 186 188 for i, a in enumerate(actions): 187 189 sa = " ".join(a) 188 print("{}/{} : {} \r".format(i, len(actions), sa), end = '') 190 if first: 191 first = False 192 else: 193 options.file.write(",") 194 if options.file != sys.stdout: 195 print("{}/{} : {} \r".format(i, len(actions), sa), end = '') 189 196 fields = {} 190 197 with subprocess.Popen( a, stdout = subprocess.PIPE, stderr = subprocess.PIPE) as proc: … … 199 206 fields[match.group(1).strip()] = float(match.group(2).strip().replace(',','')) 200 207 201 result.append([a[0][2:], sa, fields]) 202 203 print("Done ") 204 205 # ================================================================================ 206 # Print raw 207 if options.format == 'raw': 208 for r in result: 209 print(r, file=options.file) 210 sys.exit(0) 211 212 # ================================================================================ 213 # Print json 214 if options.format == 'json': 215 json.dump(result, options.file) 216 sys.exit(0) 217 218 # ================================================================================ 219 # Print csv 220 if options.format == 'csv': 221 # Clean result 222 headers = ["series", "command"] 223 data = [] 224 first = True 225 for r in result: 226 if first: 227 first = False 228 headers.extend(r[2].keys()) 229 else : 230 pass 231 232 d = [r[0], r[1]] 233 for k in headers[2:]: 234 try: 235 d.append(r[2][k]) 236 except: 237 d.append(0.0) 238 239 data.append(d) 240 241 # Print csv 242 print(",\t".join(headers), file=options.file) 243 for d in data: 244 print(",\t".join(["{}".format(dd) for dd in d]), file=options.file) 245 sys.exit(0) 208 options.file.write(json.dumps([a[0][2:], sa, fields])) 209 options.file.flush() 210 211 options.file.write("]\n") 212 213 if options.file != sys.stdout: 214 print("Done ")
Note: See TracChangeset
for help on using the changeset viewer.