在Python脚本中获取Netcat的输出



我需要在python脚本中获得netcat的输出。我当前的代码是

  response = subprocess.Popen(["netcat","smtp.myserver.net", "25"], stdout=subprocess.PIPE).stdout.read()
  x = response.find("220 ***")

我希望它检查200*的状态并处理它,但每次它在循环中运行时,它似乎都在等待我的输入。我如何打开netcat,得到它的结果,关闭它然后继续?

不要那样做

Python内置了一个smtp客户端库,可以轻松完成这项工作。真正地没有不使用它的理由。

from smtplib import SMTP
SMTP('smtp.myserver.net')

就这么简单。抓住你关心的例外。

如果你真的想知道自己做错了什么

您的程序正在等待您键入quit

解决方案?先关闭写入端:

child = subprocess.Popen(["netcat","smtp.myserver.net", "25"],
    stdout=subprocess.PIPE,
    stdin=subprocess.PIPE)
child.stdin.close()
response = child.stdout.read()
x = response.find("220 ***")

之所以需要这样做,是因为默认情况下标准输入仍在将netcat连接到您的终端。

最新更新