subprocess.Popen()详解可以参考:http://www.cppcns.com/jiaoben/python/295192.html
(1)将需要探测的ip写入ip_text文档
原始:
import re
import subprocess
import time
def check_alive(ip):
ip_text=' '.join(ip)
cmd="nmap -sP"+' '+ip_text
''' print(cmd)'''
p = subprocess.Popen(cmd,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
shell=True)
result = p.stdout.read()
result = result.decode()
result_format = re.split(r"([ \n])",result)
'''print(result_format)'''
m=0
j=0
n=[]
for i in ip:
if i in result_format:
'''print("{:->15}".format('Fine!'))'''
else:
m=1
n.append(i)
j=j+1
if m == 1:
print("{:->10} is Unreachable !!!".format(n))
else:
time.sleep(1)
print("{:->15}".format('Fine!'))
def main():
f_read=open("ip.txt","r").read()
f_read=f_read.strip()
ip=f_read.split('\n')
'''print(ip)'''
while True:
check_alive(ip)
main()
增加try......except......后(查阅文献建议使用communicate函数,添加close_fds=True,最后感觉卵用不大):
#-*- coding: utf-8 -*-
import re
import subprocess
import time
def check_alive(ip):
try:
ip_text=' '.join(ip)
cmd="nmap -sP"+' '+ip_text
p = subprocess.Popen(cmd,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
shell=True,
close_fds=True)
stdout,stderr=p.communicate()
result=stdout
result_format = re.split(r"([ \n])",result)
m=0
j=0
n=[]
for i in ip:
if i in result_format:
'''print("{:->15}".format('Fine!'))'''
else:
m=1
n.append(i)
j=j+1
if m == 1:
print("{:->10} is Unreachable !!!".format(n))
else:
'''time.sleep(1)'''
print("{:->15}".format('Fine!'))
except Exception as err:
print(err)
def main():
f_read=open("ip.txt","r").read()
f_read=f_read.strip()
ip=f_read.split('\n')
'''print(ip)'''
while True:
check_alive(ip)
main()
(2)执行完后的效果是
网络异常情况下:
网络正常情况下: