为什么这个正则表达式不起作用?

时间:2016-10-07 12:41:01

标签: python regex netcat

以下是相关代码:

import subprocess
import re
import os
p = subprocess.Popen(["nc -zv 8.8.8.8 53"], stdout=subprocess.PIPE, shell = True)
out, err = p.communicate()

regex = re.search("succeeded", out)
if not regex:
    print ("test")

我想要它做的是打印出测试,如果正则表达式与netcat命令不匹配。现在我只匹配“成功”,但这就是我所需要的,因为netcat命令打印出来:

Connection to 8.8.8.8 53 port [tcp/domain] succeeded!

代码运行正常,但它不应该匹配?

1 个答案:

答案 0 :(得分:3)

输出结果是stderr而不是stdout:

stderr=subprocess.PIPE

您可以简化使用in并且不需要shell = True:

p = subprocess.Popen(["nc", "-zv", "8.8.8.8", "53"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = p.communicate()

if "succeeded" not in err:
    print ("test")

您还可以将 stderr 重定向到 STDOUT 并使用check_output,假设您使用的是python> = 2.7:

out = subprocess.check_output(["nc", "-zv", "8.8.8.8", "53"],stderr=subprocess.STDOUT)

if "succeeded" not in out:
    print ("test")