2014-07-11 47 views
0

我有一個使用os.popen在後臺運行tcpdump的Python進程。然後它讀取並處理來自tcpdump的輸出。該進程作爲後臺進程在後臺運行。當我從命令行執行這個過程時,它運行得很好 - 它啓動tcpdump並正確讀取輸出。但是,我希望這個過程在啓動時自動運行,並且我已經指示它在cron中這樣做。當我這樣做時,我的進程正在運行(按ps命令),但tcpdump不是。Python popen過程不會保持運行

是否有某些原因的行爲是不同的開始一個進程在克隆vs從命令行啓動它?我的代碼看起來是這樣的:當有一個問題

p = os.popen('/usr/sbin/tcpdump -l -i eth0') 
while True: 
    data = p.readline() 
    # do something with data 
+2

嘗試使用'p = subprocess.Popen(['/ usr/sbin/tcpdump'],stdout = subprocess.PIPE,stderr = subprocess.PIPE])'打開它,並檢查'​​p.stderr'以查看是否出於某種原因tcpdump在啓動時失敗。 (當然似乎是這種情況)。也許eth0還沒有準備好呢? – dano

+0

感謝您讓我考慮這一點並幫助我解決問題。顯然,界面還沒有到。 – kittyhawk

回答

1

cron會向您發送電子郵件。所以第一件事就是看看你的郵箱(運行mailx來訪問它)。

如果沒有郵件,請確保進程在出現問題時將消息寫入stdout/stderr。

另請確認您使用的是正確的用戶。在某些系統上,tcpdump需要作爲root運行,因此您需要將作業安裝到root的crontab(而不是您的普通用戶)。