python中使用subprocess来使用shell
关于threading的用法
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)
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()