I am a beginner and I am learning python for my class, The problem I am currently running into is, I am sending a ping to googles server and tracing the time it takes for it to reach back. 3 values are given for each step of the ping. I need to convert these 3 values into a average but they are apart of a string with a bunch of other useless random information that I need to sort out. I'm having trouble with separating these values from the other information.
I have tried using the split() method with new lines to get a list of each individual line and del to delete some of the redundant information, but I'm having trouble with refining it further.
import subprocess
from subprocess import check_output, Popen, call, PIPE, STDOUT
latency = []
p = Popen('tracert google.com', stdout = PIPE, stderr = STDOUT, shell = True)
for line in p.stdout:
lntxt = line.decode('utf-8').rstrip()
print(lntxt)
words = lntxt.split('\n')
latency.append(words)
del latency [0:4]
del latency [-4:0]
del latency [-1]
del latency [-1]
L1 = (latency)
L2 = ""
L3 = ""
for x in L1:
L2 += str(x)
L2.split(" ms ")
This is what happens when I run the code:
Tracing route to google.com [142.250.190.110]
over a maximum of 30 hops:
1 2 ms 2 ms 1 ms 141.215.192.2
2 3 ms 14 ms 2 ms fcn-core-eth-1-4.its.umd.umich.edu
[141.215.2.202]
3 3 ms 2 ms 2 ms fcn-edge-merit-primary.its.umd.umich.edu
[141.215.2.103]
4 4 ms 10 ms 3 ms drbr-fairlane-d1.its.umd.umich.edu
[141.215.2.56]
5 3 ms 2 ms 2 ms ae1x78.dtrt-wsudc-c1.mich.net
[207.72.237.28]
6 11 ms 10 ms 16 ms ae6x14.chcg-lvl3-600w.mich.net
[198.108.22.13]
7 11 ms 11 ms 11 ms 192.35.170.66
8 13 ms 12 ms 12 ms 209.85.250.189
9 11 ms 11 ms 11 ms 142.251.60.205
10 11 ms 11 ms 11 ms ord37s35-in-f14.1e100.net
[142.250.190.110]
Trace complete.
["[' 1 2",
' 2',
' 1',
"141.215.192.2'][' 2 3",
' 14',
' 2',
"fcn-core-eth-1-4.its.umd.umich.edu [141.215.2.202]'][' 3 3",
' 2',
' 2',
"fcn-edge-merit-primary.its.umd.umich.edu [141.215.2.103]'][' 4
4",
' 10',
' 3',
"drbr-fairlane-d1.its.umd.umich.edu [141.215.2.56]'][' 5 3",
' 2',
' 2',
"ae1x78.dtrt-wsudc-c1.mich.net [207.72.237.28]'][' 6 11",
' 10',
' 16',
"ae6x14.chcg-lvl3-600w.mich.net [198.108.22.13]'][' 7 11",
' 11',
' 11',
"192.35.170.66'][' 8 13",
' 12',
' 12',
"209.85.250.189'][' 9 11",
' 11',
' 11',
"142.251.60.205'][' 10 11",
' 11',
' 11',
"ord37s35-in-f14.1e100.net [142.250.190.110]']"]
you need to process each line, searching between two characters or using regular expressions in order to extract the desired value.
I give you a functional example:
from subprocess import check_output, Popen, call, PIPE, STDOUT
latency = []
def call_traceroute(url: str):
p = Popen(f'traceroute {url}', stdout = PIPE, stderr = STDOUT, shell = True)
lines = []
for line in p.stdout:
lines.append(line.decode('utf-8').rstrip())
lines = lines[1:]
print(lines)
return lines
def extract_string_between_two_characters(original_string: str, start_character: str, end_character: str):
return original_string[original_string.find(start_character)+len(start_character):original_string.find(end_character)]
def extract_latency(line: str):
latency = extract_string_between_two_characters(original_string=line, start_character =") ", end_character="ms")
return latency
all_steps = call_traceroute('google.com')
print("\n\n")
for index, step in enumerate(all_steps):
print(f"Original Traceroute line {step}")
latency = extract_latency(step)
print(f"Latency in step: {index} is {latency} ms\n\n")
An output example is:
python3 latency.py
[' 1 192.168.1.1 (192.168.1.1) 10.005 ms 3.198 ms 3.406 ms', ' 2 10.0.0.1 (10.0.0.1) 4.231 ms 4.078 ms 4.376 ms', ' 3 172.16.8.193 (172.16.8.193) 4.896 ms 4.977 ms 4.772 ms', ' 4 10.220.100.48 (10.220.100.48) 9.616 ms 9.731 ms 11.255 ms', ' 5 74.125.119.226 (74.125.119.226) 11.714 ms 14.836 ms 10.961 ms', ' 6 74.125.242.161 (74.125.242.161) 11.411 ms 11.846 ms', ' 74.125.242.177 (74.125.242.177) 11.894 ms', ' 7 142.250.213.125 (142.250.213.125) 11.794 ms 11.892 ms 11.388 ms', ' 8 mad07s23-in-f14.1e100.net (142.250.184.174) 13.050 ms 10.042 ms 11.020 ms']
Original Traceroute line 1 192.168.1.1 (192.168.1.1) 10.005 ms 3.198 ms 3.406 ms
Latency in step: 0 is 10.005 ms
Original Traceroute line 2 10.0.0.1 (10.0.0.1) 4.231 ms 4.078 ms 4.376 ms
Latency in step: 1 is 4.231 ms
Original Traceroute line 3 172.16.8.193 (172.16.8.193) 4.896 ms 4.977 ms 4.772 ms
Latency in step: 2 is 4.896 ms
Original Traceroute line 4 10.220.100.48 (10.220.100.48) 9.616 ms 9.731 ms 11.255 ms
Latency in step: 3 is 9.616 ms
Original Traceroute line 5 74.125.119.226 (74.125.119.226) 11.714 ms 14.836 ms 10.961 ms
Latency in step: 4 is 11.714 ms
Original Traceroute line 6 74.125.242.161 (74.125.242.161) 11.411 ms 11.846 ms
Latency in step: 5 is 11.411 ms
Original Traceroute line 74.125.242.177 (74.125.242.177) 11.894 ms
Latency in step: 6 is 11.894 ms
Original Traceroute line 7 142.250.213.125 (142.250.213.125) 11.794 ms 11.892 ms 11.388 ms
Latency in step: 7 is 11.794 ms
Original Traceroute line 8 mad07s23-in-f14.1e100.net (142.250.184.174) 13.050 ms 10.042 ms 11.020 ms
Latency in step: 8 is 13.050 ms
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.