• python模块之sys和subprocess以及编写简单的主机扫描脚本


    python模块之sys和subprocess以及编写简单的主机扫描脚本

    1.sys模块

      sys.exit(n)  作用:执行到主程序末尾,解释器自动退出,但是如果需要中途退出程序,可以调用sys.exit函数,带有一个可选的整数参数返回给调用它的程序,表示你可以在主程序中捕获对sys.exit的调用。(0是正常退出,其他为异常)

      sys.path   作用:获取指定模块搜索路径的字符串集合

      sys.platform: 获取当前系统平台

      sys.argv  在外部向程序内部传递参数

    2.subprocess模块(sys模块的升级版,常用)

      subprocess.run()   作用:运行命令,返回命令执行的结果(python3.5以后的版本才会有这个命令)

      subprocess.call()   作用:执行命令,返回命令的状态,0或者非0,0表示执行成功

      subprocess.getstatusoutput()    作用:接收字符串形式的命令,返回元组形式,第一个元素是执行状态,第二个是命令结果

      subprocess.check_output()     作用:执行命令,并且返回二进制结果

    3.简单的主机扫描脚本编写

     

    2.subprocess模块 

    import subprocess
    #subprocess.run()
    #作用:运行命令,返回命令执行的结果(python3.5以后的版本才会有这个命令)
    #r1=subprocess.run("dir",shell=True) #subprocess想调用cmd内置的命令,需要加上参数shell=True
    #r2=subprocess.run("ping www.baidu.com") #ping程序是一个单独的程序,subprocess可以直接调用
    #print(r1)
    #print(r2)
    #subprocess.call()
    #作用:执行命令,返回命令的状态,0或者非0,0表示执行成功,1表示执行失败
    #r1=subprocess.call("dir",shell=True)
    #r2=subprocess.call("ping 8.8.8.8 -n 1")
    #print(r1)
    #print(r2)
    #subprocess.getstatusoutput()
    #作用:接收字符串形式的命令,返回元组形式,第一个元素是执行状态,第二个是命令结果
    r1=subprocess.getstatusoutput("dir")
    print(r1)
    r2=subprocess.getstatusoutput("dir1")
    print(r2)
    r3=subprocess.getstatusoutput("ping 1.1.1.1")
    print(r3)
    #subprocess.check_output()
    #作用:执行命令,并且返回二进制结果
    r1=subprocess.check_output("dir",shell=True)
    print(r1)

    3.简单的主机扫描脚本编写

    import sys
    import os
    def ping(net,start=50,end=200,n=1,w=10):
        for i in range(start,end+1):
            ip=net+"."+str(i)
            command="ping %s -n %d -w %d >nul"%(ip,n,w)     #>nul 不显示ping返回的信息
            print(ip,("","不通")[os.system(command)])
            #print(os.popen(command).read())
    
    #print(sys.argv)
    #print(len(sys.argv))
    
    if len(sys.argv) not in [2,4,6]:
        print("参数输入错误!")
        print("运行示例:")
        print("test01.py 123.125.114")
        print("test01.py 123.125.114 30 50")
        print("test01.py 123.125.114 30 50 4,5")
        print("语法:test01.py net startip,endip,count timeout")
    elif len(sys.argv)==2:
        net=sys.argv[1]
        ping(net)
    elif len(sys.argv)==4:
        net=sys.argv[1]
        ping(net,start=int(sys.argv[2]),end=int(sys.argv[3]))
    else:
        net=sys.argv[1]
        ping(net,start=int(sys.argv[2]),end=int(sys.argv[3]),n=int(sys.argv[4]),w=int(sys.argv[5]))

    运行效果如下:

    4.用subprocess模块编写

    代码如下:

    import sys
    import subprocess
    import time
    def ping(net,start=100,end=200,n=2,w=5):
        for i in range(start,end+1):
            ip=net+"."+str(i)
            command="ping %s -n %d -w %d"%(ip,n,w)
            print(ip,("","不通")[subprocess.call(command,stdout=open("nul","w"))]) #stdout=open("nul","w") #不显示命令执行返回的结果
    t1=time.time()
    if len(sys.argv)!=2:
        print("参数输入错误!")
        print("运行示例:")
        print("test01.py 123.125.114")
    elif len(sys.argv)==2:
        net=sys.argv[1]
        ping(net)
    t2=time.time()
    print("程序耗时%f秒!"%(t2-t1))   #195.091611秒
  • 相关阅读:
    Oracle数据库的一些常用命令
    计算机网络:计算路由表下一跳
    怎样快速对二进制和十进制进行互转化——IP地址规划与设计总结
    计算机网络-以太网,局域网,城域网,广域网,互联网,因特网,万维网的区分
    Apache与Tomcat有什么关系和区别
    Oracle 添加用户并赋权,修改密码,解锁,删除用户的方法
    使用Oracle的PROFILE对用户资源限制和密码限制
    通过修改profile 来修改账号的过期时间
    解决oracle用户过期问题
    【项目】项目36
  • 原文地址:https://www.cnblogs.com/yuzly/p/10326764.html
Copyright © 2020-2023  润新知