2016-10-07 64 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

工作很好,謝謝Padraic! – nillenilsson

相關問題