From 500008753f698f08585d0a82d612b0928ddefbce Mon Sep 17 00:00:00 2001 From: Jan Klass Date: Sun, 14 Mar 2021 17:33:39 +0100 Subject: Make use of argparse to define and handle parameters --- Non-RPC/mumble-ping.py | 102 ++++++++++++++++++++++++------------------------- 1 file changed, 49 insertions(+), 53 deletions(-) diff --git a/Non-RPC/mumble-ping.py b/Non-RPC/mumble-ping.py index 4af3bed..eded92d 100755 --- a/Non-RPC/mumble-ping.py +++ b/Non-RPC/mumble-ping.py @@ -2,56 +2,52 @@ from struct import * from string import Template -import socket, sys, time, datetime - -if len(sys.argv) < 3: - print(f"Usage: {sys.argv[0]} [] [-v]") - sys.exit() - -host = sys.argv[1] -port = int(sys.argv[2]) -if len(sys.argv) > 3 and sys.argv[3] != '-v': - fmt = sys.argv[3] -else: - fmt = "Version $v, $u/$m Users, $p, $b" -verbose = '-v' in sys.argv - -s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) -s.settimeout(1) - -buf = pack(">iQ", 0, datetime.datetime.now().microsecond) -s.sendto(buf, (host, port)) - -try: - data, addr = s.recvfrom(1024) -except socket.timeout: - print(f"{time.time()}:NaN:NaN") - sys.exit() - -if verbose: - print(f"recvd {len(data)} bytes") - -r = unpack(">bbbbQiii", data) - -version = '.'.join([str(v) for v in r[1:4]]) -ts = r[4] -users = r[5] -max_users = r[6] -bandwidth = f"{r[7] / 1000}kbit/s" - -ping = (datetime.datetime.now().microsecond - r[4]) / 1000.0 -if ping < 0: - ping = ping + 1000 -ping = f"{ping:.1f}ms" - -lut = { - 'v': version, - 't': ts, - 'u': users, - 'm': max_users, - 'p': ping, - 'b': bandwidth, -} -t = Template(fmt) -print(t.substitute(**lut)) - +import socket, sys, time, datetime, argparse + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + parser.add_argument('host', type=str, help='hostname or IP') + parser.add_argument('port', type=int, help='port; default Mumble port is 64738') + parser.add_argument('--format', type=str, required=False, default='Version $v, $u/$m Users, $p, $b') + parser.add_argument('--verbose', '-v', dest='verbose', action='store_true') + parser.set_defaults(verbose=False) + args = parser.parse_args() + + s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + s.settimeout(1) + + buf = pack(">iQ", 0, datetime.datetime.now().microsecond) + s.sendto(buf, (args.host, args.port)) + + try: + data, addr = s.recvfrom(1024) + except socket.timeout: + print(f"{time.time()}:NaN:NaN") + sys.exit() + + if args.verbose: + print(f"recvd {len(data)} bytes") + + r = unpack(">bbbbQiii", data) + + version = '.'.join([str(v) for v in r[1:4]]) + ts = r[4] + users = r[5] + max_users = r[6] + bandwidth = f"{r[7] / 1000}kbit/s" + + ping = (datetime.datetime.now().microsecond - r[4]) / 1000.0 + if ping < 0: + ping = ping + 1000 + ping = f"{ping:.1f}ms" + + lut = { + 'v': version, + 't': ts, + 'u': users, + 'm': max_users, + 'p': ping, + 'b': bandwidth, + } + t = Template(args.format) + print(t.substitute(**lut)) -- cgit v1.2.3