2016-10-07 5 views
1

Hier ist der Code in Frage:Warum funktioniert diese Regex nicht?

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") 

Was ich will Test zu tun ist, zu drucken, wenn der Regex nicht den Befehl netcat überein. Gerade jetzt nur im, passend auf „erfolgreich“, aber das ist alles was ich brauche, weil der netcat Befehl druckt:

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

Der Code läuft gut, aber sie paßt, wenn es nicht sollte?

Antwort

3

Der Ausgang kommt aus stderr nicht stdout:

stderr=subprocess.PIPE 

Sie können zur Verwendung in vereinfachen und Sie keine Shell benötigen = 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") 

Sie können auch stderr umleiten zu STDOUT und verwenden Sie check_output vorausgesetzt, Sie verwenden Python> = 2.7:

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

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

Das hat super funktioniert, Danke Padraic! – nillenilsson

Verwandte Themen