linux下 python脚本获取ping返回值

脚本执行 ping baidu.com -w 40 返回图中圈出的参数
用代码块功能插入代码,请勿粘贴截图

img

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/