]> gitweb.michael.orlitzky.com - djbdns-logparse.git/commitdiff
bin/djbdns-logparse: handle SIGINT (again).
authorMichael Orlitzky <michael@orlitzky.com>
Tue, 20 Sep 2022 23:21:28 +0000 (19:21 -0400)
committerMichael Orlitzky <michael@orlitzky.com>
Tue, 20 Sep 2022 23:21:28 +0000 (19:21 -0400)
I removed the KeyboardInterrupt handler from the original program and
have now put it back as an async handler for SIGINT. This is helpful
when the user accidentally starts the program with no arguments and it
just sits there until he hits Ctrl-C (which would previously have
shown a stack trace).

bin/djbdns-logparse

index 7808fbd99a5042a9adc31828933949325561585e..218801d0e263f6aaa056c4ec9fe523c0270997ca 100755 (executable)
@@ -2,6 +2,8 @@
 r"""
 Convert tinydns and dnscache logs to human-readable form
 """
+from signal import signal, SIGINT
+from sys import exit, stdin
 from argparse import ArgumentParser, FileType
 from djbdns.io import parse_logfile
 
@@ -11,7 +13,6 @@ parser = ArgumentParser(description = __doc__)
 
 # Parse zero or more positional arguments into a list of
 # "logfiles". If none are given, read from stdin instead.
-from sys import stdin
 parser.add_argument("logfiles",
                     metavar="LOGFILE",
                     type=FileType("r"),
@@ -29,5 +30,11 @@ parser.add_argument("logfiles",
 #
 # So anyway, don't run this on several million logfiles.
 args = parser.parse_args()
+
+# Install a SIGINT handler so thst we don't spit out a stack trace when
+# the user accidentally starts the program with no arguments and then
+# hits Ctrl-C to kill it.
+signal(SIGINT, lambda s,f: exit(0))
+
 for f in args.logfiles:
     parse_logfile(f)