2011-02-23 88 views
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() 
+0

你嘗試過每self.write(線)後添加self.flush()? – Schildmeijer 2011-02-23 16:36:35

+0

請參閱http://groups.google.com/group/python-tornado/browse_thread/thread/10a28bd316ee177/941973bc71efa916?show_docid=941973bc71efa916 – Schildmeijer 2011-02-23 19:11:20

+0

@schildmeijer 1)由於子流程管道仍在流式傳輸,因此flush無效。 2)那是我在那裏發佈的問題,因爲我沒有得到任何答案,在這裏 – 2011-02-23 19:56:15

回答

1

重定向的tcpdump輸出到一個文件,使用這樣的:

https://bitbucket.org/silverspell/tornadolog

希望它能幫助:)

+0

,特定的代碼似乎沒有工作;-(。但我會試試這個方向,謝謝 – 2011-02-27 04:22:29

+0

以及我檢查它剛剛看到它正在處理你的情況,我剛剛用「> tcpdump.txt」手動啓動了tcpdump,並在第22行中更改了文件名變量,它只是開箱即用,因爲它是我的代碼,請讓我知道你遇到的問題:) – 2011-02-27 07:45:07

+0

看到我的行動在https://gist.github.com/845994我只是創建一個文件,並指向tornadolog.py該文件(硬編碼)。啓動,但在瀏覽器窗口(wget)中什麼都沒有。 – 2011-02-27 07:55:37