#!/usr/bin/env python import argparse import socket import time import os import signal def parse_args(): parser = argparse.ArgumentParser() parser.add_argument( '--timeout', '-t', type=int, metavar='SECONDS', help='Number of seconds to wait for host', ) parser.add_argument( 'host', help='Remote host name', ) parser.add_argument( 'service', nargs='?', default='ssh', help='Service/port on remote host', ) return parser.parse_args() def wait_for(host, service, timeout=None): if timeout: deadline = time.time() + timeout else: deadline = None while True: try: sock = socket.create_connection((host, service)) except socket.error: if deadline and time.time() >= deadline: break time.sleep(1) else: sock.close() return True return False def main(): args = parse_args() try: if not wait_for(args.host, args.service, args.timeout): raise SystemExit(1) except KeyboardInterrupt: signal.signal(signal.SIGINT, signal.SIG_DFL) os.kill(os.getpid(), signal.SIGINT) if __name__ == '__main__': main()