1

たとえば、次のコードがあるとします。

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()
4

1 に答える 1

1

tcpdump の出力をファイルにリダイレクトし、これを使用します。

https://bitbucket.org/silverspell/tornadolog

それが役に立てば幸い :)

于 2011-02-26T21:00:03.970 に答える