版本从此次开始逐渐递增,本次规定:

V1表示第一个版本

V1.1表示第一个版本,第一次大修改

V1.1.1表示第一个版本,第一次大修改,第一次新增额外功能

V1.1.1.1表示第一个版本,第一次大修改,第一次新增额外功能,第一次添加功能

【前面的不要计较那些细节】

本次版本:

新增从文件读取的read_file(file_path_name)功能

目的:从文件读取,无需在代码中新增list命令的元素。

过程/函数流程=套娃:read_file------>loop_ip------>test---->str_ip---->voice_ping

简化的写也就是这样一个套娃:【联系数学的复合函数,一层套一层,哈哈哈哈哈哈哈哈哈哈~~~~~~~~~~~~~笑哭了】

loop_ip(1,read_file("ip_command.txt"))--->test(input_ip)--->voice_ping(str_ip(input_ip))【我为什么分成三个复合呢?因为啊,每个箭头都有业务逻辑判断,不单纯撒】

代码:

import os
import pyttsx3
import random
import time
'''
这个版本要做的功能。
#单独创建文件,暂时略
读取文件,最终实现从文件读取命令列表,并根据参数进行判断
read_file(file_path_name)
参数表示配置文件所在路径及名称

'''

#定义一个函数,这个函数要能够随机产生一个ip
#方法可手动输入,true表示产生随机ip,false表示手动输入,默认随机
def random_ip(self_ip,ip_more=True):
    #如果ip_more为true,产生随机ip
    if ip_more == True:
        return ""+random.randrange(1,254)+"."+random.randrange(1,254)+"."+random.randrange(1,254)+"."+random.randrange(1,254)+""
    else:
        return self_ip

#除以上方法外,还可以固定D类IP地址,如192.168.的前缀,后面两位进行随机的方法,进行局域网测试,也可以利用循环进行局域网精准完全测试。



#注意:以上方法本例暂未使用,留待有缘人自行思考,本例需要用到的模块请使用pip install 模块名进行安装,pip具体安装方法,可百度

#定义一个语音播放方法
def voice_ping(who_ip):
    engine = pyttsx3.init()
    engine.say(who_ip)
    engine.runAndWait()


#ip处理函数,返回cmd命令行的信息,对命令行的信息进行截取或加工

def str_ip(command):
    #传递命令给操作系统,命令行,并返回信息
    output = os.popen(command)
    #获取的信息是list信息
    info = output.readlines()
    #对list信息进行输出
    for line in info:
        print(line)
    #进行信息截取,2表示列表数组第二个元素,[3,16]表示截取数组下标2的值的第3到16个字符
    print(info[1][3:16])
    #测试截取的数据是不是L,如果是,表示ping成功
    print(info[2][-5])
    #对ping成功的数据进行加工判断并要提醒的数据,将其返回,最终要交给voice_ping方法进行语音合成输出
    if info[2][-5]=="L":
        return info[2]+"提示:"+info[2][3:16]+"主机在线"
    #如果该语句用于后续随机ip中,则建议直接掠过【因为大量随机产生的ip是不可能在线的,否则一直报会烦死人】
    return "无法访问目标主机"+info[1][8:21]



#定义一个测试方法
#手动输入ip测试
def test(input_ip):
#获取命令行的信息进行判断
#暂时省略
    voice_ping(str_ip(input_ip))
    
#实现,此为之前测试
#for i in ["ping www.baidu.com","ping 192.168.0.1","ping 192.168.0.101 -i 1 -n 1","ping 192.168.0.102 -i 1 -n 1","ping 192.168.0.103 -i 1 -n 1"]:
#    test(i)


#os.system("arp -a > arp.txt")


'''
定义一个读取文件内容,并将其格式化
本次新增功能
'''
def read_file(file_path_name):
    f = open(file_path_name,'r')
    #返回该方法
    return f.readlines()
    print(f.readlines())





#此为上次新增
#实现while循环【逻辑功能一、实现循环/不循环】
def loop_ip(ip_loop,ip_table):
#当ip_loop==1时,每隔一段时间进行,缺点,占用资源,不过这么点程序,无所谓了
    if ip_loop == 1:
        while 1:
            #当ip_loop==True时,表示定时播报
            #逐个取命令,传递给test
            for line in ip_table:
                test(line)
        #完成一次循环后,进行等待一定时间,继续执行,这里可根据需要填写
                time.sleep(5)
                #监听某原因时退出程序(省略)
                #否则当ip_loop==False时,表示只执行一次
    else:
        for i in ip_table:#逐个取命令,传递给test
            test(i)
#测试【测试功能1】
print("此时运行的是上个版本测试")
loop_ip(0,["ping www.baidu.com","ping 192.168.0.1","ping 192.168.0.101 -i 1 -n 1","ping 192.168.0.102 -i 1 -n 1","ping 192.168.0.103 -i 1 -n 1"])
            
#【逻辑功能二】
#测试本次成果
'''
调用loop_ip方法,实现循环,同时,将本次新增的功能进行传参测试
'''
print("本版本高能时刻!!!!!!!!!!!!!!!")
print("开始文件中的命令循环,文件命令每一行一条命令,请知晓")
loop_ip(1,read_file("ip_command.txt"))