たとえば、次のコードがあるとします。
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()