如何用Tornado处理一个(永无止境的)系统调用

1 投票
1 回答
1089 浏览
提问于 2025-04-16 12:23

比如说,我有这段代码:

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 个回答

1

把tcpdump的输出结果保存到一个文件里,然后使用这个链接:

https://bitbucket.org/silverspell/tornadolog

希望对你有帮助 :)

撰写回答