subprocess.call("ping -c 1 %s" % ip,shell = True,stdout = open('/dev/null','w'),stderr = subprocess.STDOUT)
ping发送一个ICMP请求,并且将标准输出重定向到/dev/null,相当于丢弃,并且将标准错误输出重新定向到标准输出。这条语句返回其实就是ping值,就是python程序先创建shell进程,shell创建ping进程,ping进程运行返回值被shell等待,shell返回值给python程序wait,如果成功则为0.
subprocess.Popen("arping -c 1 %s" % ip,shell = True,stdout = subprocess.PIPE)
arp请求局域网内的ip机器的mac, 有相应arping返回0, 否则返回1, 一路从arping->shell->py返回上来,stdout是重定向子进程的标准输出到一个管道, py进程就可以读取管道得到子进程的输出了.