try: sock.settimeout(.5) # times out after .5s sock.connect((sys.argv[1], int(sys.argv[2]))) except IndexError: print >> sys.stderr, 'usage: client.py IP PORT' sock.close() sys.exit(1) except: sock.close() time.sleep(.5) continue print >> sys.stderr, 'Receiving match...' try: sock.setblocking(1) # blocks until receives information match = pickle.loads(sockutils.recvall(sock)) print >> sys.stderr, match p = subprocess.Popen(shlex.split('python test.py %s' % ' '.join(map(str, match['p1'] + match['p2']))), cwd='../java_starter_package/testing/', stdout=subprocess.PIPE) out = ' '.join([ x.strip() for x in p.stdout.readlines() ]) print >> sys.stderr, out if 'ERROR' in out: msg = {'error': out} else: msg = simplejson.loads(out) sock.sendall(pickle.dumps(msg, 2))