1

我需要在 python 脚本中从 netcat 获取输出。我目前的代码是

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

我希望它检查 200 *状态并使用它,但它似乎每次循环运行时都在等待我的输入。如何打开 netcat,获取结果,关闭它并继续?

4

1 回答 1

6

不要那样做。

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到您的终端。

于 2012-08-27T10:42:10.127 回答