你好我在python 2.6以下代碼:在python從管道讀取是imposiible
command = "tcpflow -c -i any port 5559"
port_sniffer = subprocess.Popen(command, stdout=subprocess.PIPE, bufsize=1, shell=True)
while True:
line = port_sniffer.stdout.readline()
#do some stuff with line
此代碼的目的是嗅探端口5559進行通信的兩個進程(A和B)之間的通信。
現在讓我描述我具有不同的方案:
1)代碼上面沒有運行: A和B進行通信,並且我可以清楚使用日誌和Linux命令netstat -napl | grep 5559
看到表明凝固酶原sses正在通信所需的端口。
2)上面的代碼沒有運行,我通過直接從shell運行tcpflow -c -i any port 5559
來嗅探: 我可以清楚地看到控制檯上的通信:-)。
3)上面的代碼正在運行:Proccesses無法通信。 netstat -napl | grep 5559
什麼都不打印和日誌給出錯誤!
4)上面的代碼運行在調試模式:我不能似乎能夠行後步驟line = port_sniffer.stdout.readline()
我試圖用一個迭代器,而不是一個while循環(而不是它應該的問題,但仍我指出了)。我也嘗試了不同的bufsize值(無,1和8)。
請幫忙!!
tcpflow不是標準程序。你能提供背景知道什麼'tcpflow -c -i任何端口5559'都可以嗎?它只是將數據轉儲到文件,還是將信息輸出到stdout/stderr? – FuriousGeorge
噢,和FWIW http://stackoverflow.com/questions/3172470/actual-meaning-of-shell-true-in-subprocess – FuriousGeorge
tcpflow捕獲tcp數據包,並將它們的消息體(無tcp開銷)寫入文件或控制檯。 -c標誌使它將輸出寫入控制檯。 我寧願使用shell = True,因爲我不知道其他環境可以運行此程序。 – whomaniac