【发布时间】:2021-12-04 15:12:55
【问题描述】:
我编写了一个简单的代码,它应该使用线程方法同时 ping 多个 ip。看起来代码运行良好并且能够执行任务,但问题是脚本多次 ping 相同的 ips,尽管线程的range 设置为列表中 ips 的数量。
代码如下:
import os
from threading import *
from time import *
def ipList():
while True:
ip = input("Insert an ip")
ip_list.append(ip)
if ip == "end":
ip_list.pop()
break
def ipPinger(ip_list):
for ip in ip_list:
response = os.popen(f"ping -c 4 {ip}").read()
if "--- " in response:
result = response[response.find("--- "):]
print(result)
ip_list = []
ipList()
print(ip_list)
q = input("Are you sure that this is the right list? Y/N")
if q == "Y":
print("Loading...")
else:
ipList()
num = 0
for i in range(len(ip_list)):
t = Thread(target=ipPinger, args=(ip_list[num + i:],))
t.start()
这是我得到的输出:
Insert an ip8.8.8.8
Insert an ip1.1.1.1
Insert an ip8.8.4.4
Insert an ipend
['8.8.8.8', '1.1.1.1', '8.8.4.4']
Are you sure that this is the right list? Y/NY
Loading...
--- 1.1.1.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 8.132/9.569/10.592/1.017 ms
--- 8.8.8.8 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 47.767/48.436/49.066/0.547 ms
--- 8.8.4.4 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 47.001/47.400/48.047/0.434 ms
上面的 ping 在 4s 之后打印,下面的 ping 在另外 4s 之后打印
--- 1.1.1.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3006ms
rtt min/avg/max/mdev = 8.620/8.661/8.742/0.047 ms
--- 8.8.4.4 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 47.378/48.118/48.791/0.571 ms
--- 8.8.4.4 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 47.025/48.122/49.402/1.023 ms
我尝试为线程设置不同的范围,在线程中设置参数的不同方式,但没有找到解决方案。
ps。我完全是代码新手,所以也许我没有看到一些超级明显的东西,但我真的没有在网上找到解决方案,所以只是想了解我在这里做错了什么
【问题讨论】:
标签: python networking ping