An attempt at making irk clean up after itself.
authorEric S. Raymond <esr@thyrsus.com>
Tue, 26 Nov 2013 23:32:42 +0000 (18:32 -0500)
committerEric S. Raymond <esr@thyrsus.com>
Tue, 26 Nov 2013 23:32:42 +0000 (18:32 -0500)
Perplexingly, the terminate() method call doesn't.

irk

diff --git a/irk b/irk
index a8a2f42bc92fb8ad2b471f1d884a05192a5a3456..49a083fb1b83c02be7a9c3234bc0d72168cf948f 100755 (executable)
--- a/irk
+++ b/irk
@@ -4,6 +4,8 @@
 # First argument must be a channel URL. If it does not begin with "irc", 
 # the base URL for freenode is prepended.
 #
+# -k option kills irkerd if irk hard to spawn one.
+#
 # Second argument must be a payload string.  Standard C-style escapes 
 # such as \n and \t are decoded.
 #
@@ -14,6 +16,7 @@ import fileinput
 import subprocess
 import time
 import os
+import getopt
 
 def send(target, message):
     data = {"to": target, "privmsg" : message}
@@ -24,23 +27,36 @@ def send(target, message):
     except socket.error, e:
         sys.stderr.write("irkerd: write to server failed: %r\n" % e)
 
-# Spawn an irkerd instance if none is running.
-try:
-    # irkerd might already be running
-    s = socket.create_connection(("localhost", 6659))
-except:
-    # If it isn't, spawn an instance
-    print "Spawning an irker instance..."
-    subprocess.Popen("irkerd", shell=True)
-    time.sleep(0.5)
+if __name__ == "__main__":
+    (options, arguments) = getopt.getopt(sys.argv[1:], "k", )
+    killafter = False
+    for (opt, val) in options:
+        if opt == '-k':
+            killafter = True
+
+    # Spawn an irkerd instance if none is running.
+    try:
+        # irkerd might already be running
+        s = socket.create_connection(("localhost", 6659))
+        irkerd = None
+    except:
+        # If it isn't, spawn an instance
+        print "Spawning an irker instance..."
+        irkerd = subprocess.Popen("irkerd", shell=True)
+        time.sleep(0.5)
 
-target = sys.argv[1]
-if not "irc:" in target:
-    target = "irc://chat.freenode.net/{0}".format(target)
-message = " ".join(sys.argv[2:])
-message = message.decode('string_escape')
-if message == '-':
-    for line in fileinput.input('-'):
-        send(target, line.rstrip('\n'))
-else:
-    send(target, message)
+    target = arguments[0]
+    if not "irc:" in target:
+        target = "irc://chat.freenode.net/{0}".format(target)
+    message = " ".join(arguments[1:])
+    message = message.decode('string_escape')
+    if message == '-':
+        for line in fileinput.input('-'):
+            send(target, line.rstrip('\n'))
+    else:
+        send(target, message)
+    if killafter:
+        if irkerd:
+            irkerd.terminate()
+            irkerd.wait()
+            print "...terminated."