70 lines
1.3 KiB
Python
70 lines
1.3 KiB
Python
|
#!/usr/bin/env python
|
||
|
#
|
||
|
import sys
|
||
|
import json
|
||
|
import math
|
||
|
|
||
|
"""
|
||
|
Given a file of Scyther verification tests to do (json file), create a shell file to run them all using bsub.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
[1] Filename of json stuff
|
||
|
[2] Step count: how many verification tasks go into one job
|
||
|
[3] Additional commands to send to bsub (e.g. "-W 1:00")
|
||
|
|
||
|
"""
|
||
|
|
||
|
def countlines(fn):
|
||
|
count = 0
|
||
|
fh = open(fn,'r')
|
||
|
for l in fh.xreadlines():
|
||
|
count = count + 1
|
||
|
fh.close()
|
||
|
return count
|
||
|
|
||
|
def marker(jobcount,todo):
|
||
|
left = todo - jobcount
|
||
|
dperc = int((100 * jobcount) / todo)
|
||
|
print "echo \"Sent %i out of %i jobs, hence %i left. %i%% done.\"" % (jobcount,todo,left,dperc)
|
||
|
|
||
|
def main(fn,step,optlist):
|
||
|
|
||
|
todo = math.ceil(countlines(fn) / int(step))
|
||
|
|
||
|
fh = open(fn,'r')
|
||
|
ln = 1
|
||
|
buf = 0
|
||
|
s = ""
|
||
|
jobcount = 0
|
||
|
done = 0
|
||
|
|
||
|
for l in fh.xreadlines():
|
||
|
if buf == 0:
|
||
|
s = "bsub %s ./json-scyther.py %s" % (" ".join(optlist),fn)
|
||
|
s += " %i" % (ln)
|
||
|
buf = buf + 1
|
||
|
done = done + 1
|
||
|
if buf >= int(step):
|
||
|
print (s)
|
||
|
s = ""
|
||
|
buf = 0
|
||
|
jobcount = jobcount + 1
|
||
|
if jobcount % 10 == 0:
|
||
|
"""
|
||
|
After ten jobs, display progress info
|
||
|
"""
|
||
|
marker(jobcount,todo)
|
||
|
|
||
|
ln = ln + 1
|
||
|
print (s)
|
||
|
marker(jobcount,todo)
|
||
|
fh.close()
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
""" Usage: filename, step, options to send to bsub
|
||
|
"""
|
||
|
main(sys.argv[1],sys.argv[2],sys.argv[3:])
|
||
|
|