python中使用subprocess来使用shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
from __future__ import print_function
import subprocess
import threading
def is_reachable(ip):
if subprocess.call([ "ping" , "-c" , "2" , ip]) = = 0 : #只发送两个ECHO_REQUEST包
print ( "{0} is alive." . format (ip))
else :
print ( "{0} is unalive" . format (ip))
if __name__ = = "__main__" :
ips = [ "www.baidu.com" , "192.168.0.1" ]
threads = []
for ip in ips:
thr = threading.Thread(target = is_reachable, args = (ip,)) #参数必须为tuple形式
thr.start() #启动
threads.append(thr)
for thr in threads:
thr.join()
|
改良 :使用Queue来优化(FIFO)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
from __future__ import print_function
import subprocess
import threading
from Queue import Queue
from Queue import Empty
def call_ping(ip):
if subprocess.call([ "ping" , "-c" , "2" , ip]) = = 0 :
print ( "{0} is reachable" . format (ip))
else :
print ( "{0} is unreachable" . format (ip))
def is_reachable(q):
try :
while True :
ip = q.get_nowait() #当队列为空,不等待
call_ping(ip)
except Empty:
pass
def main():
q = Queue()
args = [ "www.baidu.com" , "www.sohu.com" , "192.168.0.1" ]
for arg in args:
q.put(arg)
threads = []
for i in range ( 10 ):
thr = threading.Thread(target = is_reachable, args = (q,))
thr.start()
threads.append(thr)
for thr in threads:
thr.join()
if __name__ = = "__main__" :
main()
|
以上这篇对python判断ip是否可达的实例详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/csdn2798694115/article/details/79941619