使用子进程ping一个地址并获得Python中的平均ping输出?

使用子进程ping一个地址并获得Python中的平均ping输出?,python,Python,为此: import subprocess hostname = '104.160.142.3' pingResponse = subprocess.Popen(["ping", hostname, "-n", '1'], stdout=subprocess.PIPE).stdout.read() 我得到一个字符串响应: b'\r\nPinging 104.160.142.3 with 32 bytes of data:\r\nReply from 104.160.142.3: bytes=

为此:

import subprocess

hostname = '104.160.142.3'
pingResponse = subprocess.Popen(["ping", hostname, "-n", '1'], stdout=subprocess.PIPE).stdout.read()
我得到一个字符串响应:

b'\r\nPinging 104.160.142.3 with 32 bytes of data:\r\nReply from 104.160.142.3: bytes=32 time=159ms TTL=60\r\n\r\nPing statistics for 104.160.142.3:\r\n    Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),\r\nApproximate round trip times in milli-seconds:\r\n    Minimum = 159ms, Maximum = 159ms, Average = 159ms\r\n'
我基本上想得到平均ms部分并将其存储在另一个字符串中,但如果我尝试逐字打印:

for i in pingResponse:
    print(i)
我只得到一堆数字:

58
32
83
101
110
116
32
61
32
49
44
32
82
101
99
101
105
118
101
100
32
61
32
49
44
32
76
111
115
116
32
61
32
48
32
40
48
37
32
108
111
115
115
41
44
13
10
65
112
112
114
111
120
105
109
97
116
101
32
114
111
117
110
100
32
116
114
105
112
32
116
105
109
101
115
32
105
110
32
109
105
108
108
105
45
115
101
99
111
110
100
115
58
13
10
32
32
32
32
77
105
110
105
109
117
109
32
61
32
52
52
109
115
44
32
77
97
120
105
109
117
109
32
61
32
52
52
109
115
44
32
65
118
101
114
97
103
101
32
61
32
52
52
109
115
13
10

如何将平均毫秒存储到另一个字符串中?

您得到的是数字,因为这是一个二进制字符串(请注意开头的
b

您需要先对其进行
解码
,然后才能使用:


您得到的是数字,因为这是一个二进制字符串(请注意开头的
b

您需要先对其进行
解码
,然后才能使用:


请注意,b前缀表示字节,但是。即使将其视为字符串,以这种方式对其进行迭代也会逐字符迭代,而不是逐字迭代(您需要使用“split()”)。看起来您可能正在使用Python3,在这种情况下,您会看到值中每个字节的整数值。但是请小心,因为不同的系统有不同的ping实现,其输出会有很大差异。例如,这里是我使用的ping命令的stats行:
round-trip-min/avg/max=2/3/6 ms
。即使将其视为字符串,以这种方式对其进行迭代也会逐字符迭代,而不是逐字迭代(您需要使用“split()”)。看起来您可能正在使用Python3,在这种情况下,您会看到值中每个字节的整数值。但是请小心,因为不同的系统有不同的ping实现,其输出会有很大差异。例如,这里是我使用的ping命令的stats行:
round-trip min/avg/max=2/3/6 ms
import re

s = b'\r\nPinging 104.160.142.3 with 32 bytes of data:\r\nReply from 104.160.142.3: bytes=32 time=159ms TTL=60\r\n\r\nPing statistics for 104.160.142.3:\r\n    Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),\r\nApproximate round trip times in milli-seconds:\r\n    Minimum = 159ms, Maximum = 159ms, Average = 159ms\r\n'

s = s.decode()

print(re.search(r'Average = (\d+)', s, re.MULTILINE).group(1))

>> 159