为什么这个正则表达式不起作用?
Why doesnt this regex work?
这里是有问题的代码:
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 命令不匹配时打印出测试。现在我只匹配 "succeeded" 但这就是我所需要的,因为 netcat 命令打印出来:
Connection to 8.8.8.8 53 port [tcp/domain] succeeded!
代码运行良好,但它在不应该匹配的时候匹配?
输出是 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")
这里是有问题的代码:
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 命令不匹配时打印出测试。现在我只匹配 "succeeded" 但这就是我所需要的,因为 netcat 命令打印出来:
Connection to 8.8.8.8 53 port [tcp/domain] succeeded!
代码运行良好,但它在不应该匹配的时候匹配?
输出是 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")