IPythonのログをプッシュし続けるサーバを書いてみた

会社でIPythonのセミナーをやったので、1時間でやっつけてみたスクリプト。
ものすごい恥ずかしいけど、誰も褒めてくれなかったから、ここに書いておく。ネタとしてはけっこう面白いと思ったんだけどなあ。

SocketServerの使い方は、指定されたページまたはファイルは存在しませんのを丸パクリ。

意味やあるべき姿もわからずに書いてたけど、たぶん俺はネットワークプログラミングに入門したほうがいいんだと思う。

from SocketServer import *
import time

RECV_BUF = 8192

class Handler(BaseRequestHandler):
    def setup(self):
        print "setup"
        self.file = open("/path/to/ipython_log", "rb")

    def handle(self):
        print "connect from:", self.client_address
        while True:
            ret = self.request.recv(RECV_BUF)
            if len(ret) == 0:
                break
            self.request.send(ret)
            while True:
                where = self.file.tell()
                line = self.file.readline()
                if not line:
                    time.sleep(1)
                    self.file.seek(where)
                else:
                    self.request.send(line)

        self.request.close()

def main():
    sv = ThreadingTCPServer(('', 27070), Handler)
    ##sv = ForkingTCPServer(('', 7070), Handler)
    print 'listen to:', sv.socket.getsockname()
    sv.serve_forever()

if __name__ == '__main__':
    main()

telnet tail-f_server 27070

ってやるとipythonのログが垂れ流されてきます。