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()

其他

原文地址:https://www.cnblogs.com/mmyy-blog/p/9565425.html