在Python脚本中获取Netcat的输出

时间:2012-08-27 10:29:09

标签: python shell netcat

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

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

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

1 个答案:

答案 0 :(得分:6)

不要那样做。

Python内置了smtp client library,可以轻松完成这项工作。真。有没有的理由不使用它。

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