Как я могу обслуживать (бесконечный) системный вызов с Tornado - PullRequest
1 голос
/ 23 февраля 2011

Например, предположим, у меня есть этот код:

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 голос
/ 27 февраля 2011

Перенаправьте вывод tcpdump в файл и используйте это:

https://bitbucket.org/silverspell/tornadolog

Надеюсь, это поможет:)

...