如何使用Tornado服务(永无止境)系统调用

时间:2011-02-23 12:19:44

标签: python io tornado epoll system-calls

例如,假设我有这段代码:

def dump():
    tcpdump = subprocess.Popen("tcpdump -nli any", 
        stdin=subprocess.PIPE, stdout=subprocess.PIPE, shell=True)
    outputfile = tcpdump.stdout

    for line in outputfile:
        print line,

如何将此类输出提供给浏览器? 由于没有停止点,我不知道在哪里与轮询循环挂钩。 更重要的是,由于打印线工作(我看到终端上的线路被丢弃),浏览器没有得到相同的线路,见下文:

class TCPDumpHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("<form method='post' action='/log'><input type='submit'></form>")

    @tornado.web.asynchronous
    def post(self):
        tcpdump = subprocess.Popen("tcpdump -nli any", 
            stdin=subprocess.PIPE, stdout=subprocess.PIPE, shell=True)
        outputfile = tcpdump.stdout

        for line in outputfile:
            print line,
            self.write(line)

        self.finish()

1 个答案:

答案 0 :(得分:1)

将tcpdump的输出重定向到文件并使用:

https://bitbucket.org/silverspell/tornadolog

希望有所帮助:)