#!/usr/bin/python """Run a command until it succeeds. Lars Wirzenius """ import optparse import subprocess import sys import time def do_until(options, argv): while True: if options.verbose: sys.stderr.write("do-until: executing: %s\n" % " ".join(argv)) if options.no_act: sys.stderr.write("do-until: not running command, pretending it " "works anyway\n") break else: p = subprocess.Popen(argv) p.communicate() if p.returncode == 0: break sys.stderr.write("do-until: command failed, " "trying again in 1 second\n") time.sleep(1) def parse_args(args): parser = optparse.OptionParser() parser.add_option("-n", "--no-act", action="store_true", help="Do not run command, just pretend to do it, and " "pretend that it succeeds.") parser.add_option("-v", "--verbose", action="store_true", help="Print command before executing it.") options, argv = parser.parse_args(args) return options, argv def main(): options, argv = parse_args(sys.argv[1:]) if argv: do_until(options, argv) if __name__ == "__main__": main()