os.popen命令获取返回结果,这种结果固定的直接用正则表达式数字提取,思路是这么个思路,细节有问题改一改吧,当前手上没有linux,你可以试试看下
import os
import re
cmd = "ping baidu.com -w 40 "
print(cmd)
result = os.popen(cmd)
result = result.read()
line1,line2= result.splitlines()[-2:] #取倒数两行
packets,received,loss,time=re.findall(r'([\d+\.]+)',line1) #提取数字
min,avg,max,medev=re.findall(r'([\d+\.]+)',line2)
import subprocess
import re
def pingTest():
p = subprocess.Popen("ping baidu.com -w 5", stdout=subprocess.PIPE, shell=True)
(output, err) = p.communicate()
p_status = p.wait()
re_compile = re.compile(r'([\d.]*%) packet')
packageNum = re_compile.search(str(output)).group(1)
re_compile = re.compile(r'time=([\d.]*) ms')
timeNum = re_compile.search(str(output)).group(1)
re_compile = re.compile(r'min/avg/max/mdev = (.*) ms')
summerNum = re_compile.search(str(output)).group(1)
return (packageNum, timeNum, summerNum)
if __name__ == '__main__':
print(pingTest())
参考
https://cloud.tencent.com/developer/article/1569014
亲测,已成功!
#*coding=utf-8
import subprocess
import re
p = subprocess.Popen("ping baidu.com -w 40", stdout=subprocess.PIPE, shell=True)
out = p.stdout.read().decode('gbk')
tm = re.findall('time (.*?)ms',out)[0]
print(tm)
python脚本
# -*- coding: utf-8 -*-
import subprocess
import re
import sys
host = sys.argv[1]
count = sys.argv[2]
output = subprocess.check_output(['ping',host,'-w',count]).decode('utf-8').strip()
with open(file=r"a.txt",mode="w",encoding="utf-8") as fw:
fw.write(output)
with open(file=r"a.txt",mode="r",encoding="utf-8") as fr:
line_list = fr.readlines()
line1 = line_list[-2]
line2 = line_list[-1]
time = line1.strip().split(" ")[-1]
print(re.search("[0-9]+",time).group(0))
rtt = re.search('[0-9]+.[0-9]+/[0-9]+.[0-9]+/[0-9]+.[0-9]+/',line2).group(0)
print(rtt)
执行方式
[root@server1 ~]# python3 1.py www.baidu.com 20
19042
14.065/14.468/15.262/