如何用Tornado处理一个(永无止境的)系统调用
比如说,我有这段代码:
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