2011-03-01 74 views
1

我試圖在子進程上運行folowing命令並收集輸出。python subprocess.popen進入無限循環

nmap -n -PN -sT -T4 -p 445,139 10.11.1.0/24 --exclude matrix 

此命令返回一個錯誤,這對我來說很好。

的問題是,當我從蟒蛇這樣做是這樣的:

import subprocess 
nmap_process = subprocess.Popen(command, stdout=subprocess.PIPE,stderr=subprocess.PIPE)   
output,errOutput=nmap_process.communicate() 

進程掛起。
如果我不使用stderr參數,namp的第一個錯誤行打印在一個無限循環中

有沒有人有任何關於如何處理這個問題的意見?

回答

1
import subprocess 
cmd = "nmap -n -PN -sT -T4 -p 445,139 10.11.1.0/24 --exclude matrix" 
pro = subprocess.Popen(cmd, stdout = subprocess.PIPE, stderr = subprocess.PIPE) 
pro.communicate() #[0] is stdout [1] is stderr :P 

self.nmap_process.communicate()似乎是你的問題。你是在課堂上創造這個嗎?我們可以看到更多的代碼嗎?另外,當我在相同的代碼中運行nmap stderr cmd時,我的代碼中沒有掛起,並且沒有無限循環。

+0

hehehe好吧然後:)心靈標記爲答案? – 2011-03-01 09:59:15

+0

感謝隊友,但問題仍然存在,這是我在上面的帖子中的一個錯字,我使用了你寫的相同的代碼並得到了問題。 – jojo 2011-03-01 10:01:27

+0

我很抱歉的投票,這不是一個排字錯誤 – jojo 2011-03-01 10:04:08