Python utility to run tracedump locally
This commit is contained in:
parent
063720d6e9
commit
4881603df9
|
@ -0,0 +1,77 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# Copyright 2017 Justin Moore. All Rights Reserved.
|
||||||
|
import argparse
|
||||||
|
import glob
|
||||||
|
import itertools
|
||||||
|
from multiprocessing.dummy import Pool
|
||||||
|
import os
|
||||||
|
import time
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
def parallel_arg_type(value):
|
||||||
|
ivalue = int(value)
|
||||||
|
if ivalue < 1:
|
||||||
|
raise argparse.ArgumentError(
|
||||||
|
"%s is an invalid number of processes (>= 1)" % ivalue)
|
||||||
|
|
||||||
|
return ivalue
|
||||||
|
|
||||||
|
|
||||||
|
def file_type(value):
|
||||||
|
if not os.path.isfile(value):
|
||||||
|
raise argparse.ArgumentError("%s is an invalid filename" % value)
|
||||||
|
|
||||||
|
return value
|
||||||
|
|
||||||
|
|
||||||
|
def run_dumper(exe_path, input_name):
|
||||||
|
try:
|
||||||
|
start_time = time.perf_counter()
|
||||||
|
|
||||||
|
p = subprocess.Popen([
|
||||||
|
exe_path,
|
||||||
|
input_name,
|
||||||
|
'--log_file=stdout',
|
||||||
|
], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||||
|
p.wait()
|
||||||
|
elapsed_time = time.perf_counter() - start_time
|
||||||
|
print("%.3f seconds, code %2d (%s)" % (elapsed_time, p.returncode, input_name))
|
||||||
|
except OSError:
|
||||||
|
print("exe is invalid :(")
|
||||||
|
|
||||||
|
|
||||||
|
def main(argv):
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument(
|
||||||
|
'exepath', help='path to the trace dump executable', type=file_type)
|
||||||
|
parser.add_argument('files', nargs='*')
|
||||||
|
parser.add_argument('-j', type=parallel_arg_type,
|
||||||
|
help='number of parallel processes', default=1)
|
||||||
|
args = parser.parse_args(argv[1:])
|
||||||
|
exepath = args.exepath
|
||||||
|
|
||||||
|
files = []
|
||||||
|
for wildcard in args.files:
|
||||||
|
files.extend(glob.glob(wildcard))
|
||||||
|
|
||||||
|
if len(files) == 0:
|
||||||
|
print("No input files found!")
|
||||||
|
return 1
|
||||||
|
|
||||||
|
print("Processing...")
|
||||||
|
pool = Pool(args.j)
|
||||||
|
|
||||||
|
start_time = time.perf_counter()
|
||||||
|
results = pool.starmap(run_dumper, zip(itertools.repeat(exepath), files))
|
||||||
|
pool.close()
|
||||||
|
pool.join()
|
||||||
|
|
||||||
|
elapsed_time = time.perf_counter() - start_time
|
||||||
|
print("entire runtime took %.3f seconds" % elapsed_time)
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
sys.exit(main(sys.argv))
|
Loading…
Reference in New Issue