2016-10-07 11 views
1

は、問題のコードです:私はそれが何をしたいのかなぜこの正規表現は機能しませんか?ここ

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! 

コードが細かい実行されますがとき、それはいけない、それが一致しましたか?

答えて

3

出力は標準エラー出力に出て来ていない標準出力:

stderr=subprocess.PIPE 

はあなたが使用して簡素化することができますし、シェルを必要としない=真:

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

ます。また標準エラー出力をリダイレクトすることができますSTDOUTとpython> = 2.7を使用していると仮定してcheck_outputを使用してください:

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

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

すごくうまくいった、パドレイクありがとう! – nillenilsson

関連する問題