Mercurial > hg > fail
diff fail.py @ 0:02d077c5627a
initial program
author | Jeff Hammel <k0scist@gmail.com> |
---|---|
date | Mon, 29 Feb 2016 13:48:39 -0800 |
parents | |
children | a4680e54c481 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fail.py Mon Feb 29 13:48:39 2016 -0800 @@ -0,0 +1,50 @@ +#!/usr/bin/env python + +""" +run a program until it fails +""" + +# imports +import argparse +import subprocess +import sys +import time + +def main(args=sys.argv[1:]): + """CLI""" + + # parse command line + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('command', help="command to run") + parser.add_argument('--code', dest='codes', default=(0,), nargs='+', + help="allowed exit codes") + parser.add_argument('-s', '--sleep', dest='sleep', + type=float, default=1., + help="sleep between iterations [DEFAULT: %(default)]") + options = parser.parse_args(args) + + try: + + ctr = 0 + while True: + + print ("Iteration {}".format(ctr)) + ctr += 1 + + # run it + process = subprocess.Popen(options.command, shell=True) + _, _ = process.communicate() + + # test it + if process.returncode not in options.codes: + sys.exit(process.returncode) + + # loop control + time.sleep(options.sleep) + + + except KeyboardInterrupt: + sys.exit(0) + +if __name__ == '__main__': + main()