• python类脚本(包含将一个文件里面的命令以 ; 分隔,一个命令一行)


    一在windows主机上探测主机是否存活

    下面以多线程的方式:

    
    
    import os
    import time
    import subprocess
    from concurrent.futures import ThreadPoolExecutor
    import re


    def ping_call(network,num):
    ipaddr='ping '+network+"."+str(num)
    command=ipaddr+' -n 2 -w 1'
    print(command)
    result=subprocess.Popen(command,
    shell=True,stdout=subprocess.PIPE)
    s=result.stdout.read().decode('gbk')
    e = "TTL" in s
    if e:
    print('ip地址:{} ping ok'.format(ipaddr))
    else:
    print('ip地址:{} ping fall'.format(ipaddr))


    if __name__ == '__main__':
    network=input('请输入网段>>>').strip()
    host=input('请输入主机范围以空格隔开>>>').strip().split()
    a,b=host[0],host[1]
    print(network.split('.'))
    if len(network.split('.'))==3 and a.isdigit() and b.isdigit() and re.match('d{1,3}.d{1,3}.d{1,3}',network):
    a=int(a)
    b=int(b)
    start_time = time.time()
    res_l=[]
    pool=ThreadPoolExecutor(50)
    for line in range(a,b+1):
    ret=pool.submit(ping_call,network,line)
    res_l.append(ret)
    pool.shutdown()
    print("程序耗时{:.2f}".format(time.time() - start_time))
     

     二在Linux上面打印九九乘法表

    方法一

    #!/usr/bin/python3.6
    for i in range(1,10):
      for j in range(1,i+1):
        print(i,'*',j,'=',i*j,end=' ')
      print(' ')

    方法二:一行命令版

    print(''.join([str(a) +"*"+ str(b) +"="+ str(a * b) + str('
    ' if a==b else '	') for a in range(1, 10) for b in range(1, a+1)]))

     三 结合Linux命令和python命令,使得代码多样化

    主要命令  subprocess  用于python3 相对于python2的 commands命令,还有popen命令,popen命令执行后面读取后,最后会有一个空行

    popen返回的是file read的对象,对其进行读取使用read()

    [root@mylinux python-script]# cat guan-dao.py 
    import os  
    import subprocess
    var=subprocess.getoutput("awk -F ':' '{print $1,$7}' /etc/passwd")#var结果时字符串,使用了shell命令
    os.environ['var']=var  #将变量传入shell的空间
    var=list(var.split("
    ")) #以回车为分割变成列表
    for i in var:
      i=i.split(" ")
      if i[1].startswith('/s'):
        print(i)
    print('当前执行用户是:')
    print(os.popen('whoami').read()) #读取当前用户,这样就使用了shell命令
    result=os.popen("echo $var|awk  '{for(i=2;i<=NF;i=i+2){if($i ~ /^/b.*sh$/)print $(i-1),$i}}'").read() #使用shell命令,打印以/b开头sh结尾的字段
    #result=os.popen("echo $var|awk  '{for(i=2;i<=NF;i=i+2)print $i}'").read()
    print(result)

    打印结果

    ['bin', '/sbin/nologin']
    ['daemon', '/sbin/nologin']
    ['adm', '/sbin/nologin']
    ['lp', '/sbin/nologin']
    ['shutdown', '/sbin/shutdown']
    ['halt', '/sbin/halt']
    ['mail', '/sbin/nologin']
    ['operator', '/sbin/nologin']
    ['games', '/sbin/nologin']
    ['ftp', '/sbin/nologin']
    ['nobody', '/sbin/nologin']
    ['systemd-bus-proxy', '/sbin/nologin']
    ['systemd-network', '/sbin/nologin']
    ['dbus', '/sbin/nologin']
    ['polkitd', '/sbin/nologin']
    ['abrt', '/sbin/nologin']
    ['unbound', '/sbin/nologin']
    ['tss', '/sbin/nologin']
    ['libstoragemgmt', '/sbin/nologin']
    ['rpc', '/sbin/nologin']
    ['colord', '/sbin/nologin']
    ['usbmuxd', '/sbin/nologin']
    ['saslauth', '/sbin/nologin']
    ['geoclue', '/sbin/nologin']
    ['setroubleshoot', '/sbin/nologin']
    ['rtkit', '/sbin/nologin']
    ['qemu', '/sbin/nologin']
    ['radvd', '/sbin/nologin']
    ['chrony', '/sbin/nologin']
    ['ntp', '/sbin/nologin']
    ['sssd', '/sbin/nologin']
    ['rpcuser', '/sbin/nologin']
    ['nfsnobody', '/sbin/nologin']
    ['pulse', '/sbin/nologin']
    ['gdm', '/sbin/nologin']
    ['gnome-initial-setup', '/sbin/nologin']
    ['avahi', '/sbin/nologin']
    ['postfix', '/sbin/nologin']
    ['sshd', '/sbin/nologin']
    ['tcpdump', '/sbin/nologin']
    ['apache', '/sbin/nologin']
    ['zabbix', '/sbin/nologin']
    当前执行用户是:
    root
    
    root /bin/bash
    liming /bin/bash
    zhangsan /bin/bash
    pyenv /bin/bash
    wang5 /bin/bash
    mysql /bin/bash

     四 对文件的内容进行匹配找到合适的内容

    [root@localhost aaa]# cat tt.py
    #!/usr/bin/python3
    #
    import re
    with open('hhh.txt','r')as file:
       content=file.readlines()
       for i in content:
         if re.match("2019/7/11 (13|15):d{2}sd{3}",i): #s为空格,d为数字 2019/7/11 (13|15):d{2}sd{2}包括 2019/7/11 (13|15):d{2}sd{3}匹配的内容
    #如需精确可以加$ 2019/7/11 (13|15):d{2}sd{2}$

    print(i)
    [root@localhost aaa]# python3 tt.py 
    2019/7/11 15:00 328

    五 整理文件,将分号作为分隔符,每行一个命令,(本次测试用于postgres命令分开)

    def format_file():
        '''此函数用来将文件里面的命令按照分号分隔并回车'''
        line=""
        ix=0
        f=open('command','r',encoding='utf-8')
        f1=open('command1','a+',encoding='utf-8')
        f1.seek(0)
        f1.truncate()  #这两行用来清空文件内容
        while True:
            ch=f.read(1)
            if not ch: break  #没有数据退出
            line=line+str(ch)
            if (ch==";"):
                ix=ix+1
                kk=str(line[0:len(line) - 1]).strip().replace('
    ','') #去除空格和回车符
                f1.write(kk+";"+"
    ") #最后加上回车符用来独立一行
                f1.flush()
                line=""
        f1.close()
        f.close()

    其他

  • 相关阅读:
    2020年秋第四五周-代码规范,结对要求
    2020年秋第四五周-四则运算试题生成
    同时装了WPS和Office新建的时候不知道是哪个文件
    开讲啦郑强演讲:你为什么读大学?
    PC版kindle无法连接网络
    前端编程良好习惯
    教你隐藏盘符,把你的小姐姐藏起来
    腾讯,比你想的更有趣
    U盘之父中国朗科的一生:我曾打败索尼,如今却只能靠收租为生
    动作之概述
  • 原文地址:https://www.cnblogs.com/mmyy-blog/p/9565425.html
Copyright © 2020-2023  润新知