python subprocess.popen 进入无限循环

1 投票
1 回答
3965 浏览
提问于 2025-04-16 12:43

我正在尝试在一个子进程中运行以下命令,并收集输出。

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

这个命令会返回一个错误,这对我来说没问题。

问题是,当我在Python中这样做时:

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

这个进程就卡住了。
如果我不使用stderr参数,namp的第一行错误信息就会无限循环打印。

有没有人有什么建议,关于如何处理这个问题?

1 个回答

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的错误输出命令时,我的代码不会卡住,也不会无限循环。

撰写回答