#!/usr/bin/python from timeit import default_timer as timer import statistics import subprocess import sys if len(sys.argv) <= 3: print("usage: ping-ssh ") sys.exit(1) host = sys.argv[1] repeat = int(sys.argv[2]) ping_string = sys.argv[3] def ping(stdin, stdout): ping_bytes = (ping_string+"\n").encode() stdin.write(ping_bytes) result = stdout.read(len(ping_bytes)) assert result == ping_bytes proc = subprocess.Popen(['ssh', host, 'cat'], bufsize=0, stdout=subprocess.PIPE, stdin=subprocess.PIPE) # ping once to ensure the "connection" is ready. Without this the first ping # would be much slower than all others due to ssh/cat starting up ping(proc.stdin, proc.stdout) times = [] for i in range(repeat): start = timer() ping(proc.stdin, proc.stdout) end = timer() time = end - start times.append(time) print("{:.5f}ms".format(time * 1000)) print("") print("mean: {:.5f}ms".format(statistics.mean(times) * 1000)) print("median: {:.5f}ms".format(statistics.median(times) * 1000)) print("min: {:.5f}ms".format(min(times) * 1000)) print("max: {:.5f}ms".format(max(times) * 1000)) proc.stdin.close() proc.wait()