2016-09-29 96 views
0

我正在寫經過subprocess.open抑制tcpdump的輸出完全

執行tcpdump的現在,一個python腳本,我想這個腳本不輸出任何內容到屏幕(標準輸出),但只是默默地運行。我試着這樣做:

ps_dump = subprocess.Popen(['tcpdump', '-U', '-w', pcapfile, 'port 53'], stdout=subprocess.PIPE) 

但它仍然輸出這些:


eth0設備進入混雜模式 tcpdump的:聽在eth0連桿式EN10MB(以太網),捕獲大小65535字節

0分組捕獲

0的數據包由濾波器接收

0包下降內核

eth0設備離開混雜模式


我要徹底抑制這些。如果我運行腳本,它不應該打印任何東西。 我讀過你可以在linux下使用>/dev/null來壓制,但是我如何在上面的Popen命令中使用它?

任何建議或答案如何讓這個工作?

+0

我覺得@λuser有它的權利 - tcpdump的被寫入標準錯誤,你是不是捕捉輸出。欲瞭解更多信息,請參閱:http://stackoverflow.com/questions/10683184/piping-popen-stderr-and-stdout – Loring

回答

0

您可以通過一個文件描述符到stdout=說法,於是乾脆:

with open(os.devnull, 'w') as nullfd: 
    proc = Popen(..., stdout=nullfd) 
+0

嗯似乎並沒有工作...我試過之前問這個問題 – vinwin

+1

@vinwin它的工作在我的電腦上用'ls'命令。你確定'tcpdump'不會在stderr上輸出嗎? –