python 规范 一行 命令_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='\t')

print('\n')

方法二:一行命令版

print(''.join([str(a) +"*"+ str(b) +"="+ str(a * b) + str('\n' if a==b else '\t') 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

importosimportsubprocess

var=subprocess.getoutput("awk -F ':' '{print $1,$7}' /etc/passwd")#var结果时字符串,使用了shell命令

os.environ['var']=var #将变量传入shell的空间

var=list(var.split("\n")) #以回车为分割变成列表

for i invar:

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#importre

with open('hhh.txt','r')as file:

content=file.readlines()for i incontent:if re.match("2019/7/11 (13|15):\d{2}\s\d{3}",i): #\s为空格,\d为数字2019/7/11 (13|15):\d{2}\s\d{2}包括 2019/7/11 (13|15):\d{2}\s\d{3}匹配的内容

#如需精确可以加$ 2019/7/11 (13|15):\d{2}\s\d{2}$

print(i)

[root@localhost aaa]#python3 tt.py

2019/7/11 15:00 328

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

def format_file():'''此函数用来将文件里面的命令按照分号分隔并回车'''line=""ix=0f=open('command','r',encoding='utf-8')

f1=open('command1','a+',encoding='utf-8')

f1.seek(0)

f1.truncate() #这两行用来清空文件内容whileTrue:

ch=f.read(1)if not ch: break#没有数据退出

line=line+str(ch)if (ch==";"):

ix=ix+1kk=str(line[0:len(line) - 1]).strip().replace('\n','') #去除空格和回车符

f1.write(kk+";"+"\n") #最后加上回车符用来独立一行

f1.flush()

line=""f1.close()

f.close()

其他

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值