【发布时间】:2018-04-25 14:05:58
【问题描述】:
我是 Python 新手,正在尝试设置一个脚本来检查本地网络上特定 wifi 连接的 IOT 设备的状态。
基本上,该脚本采用我要检查的 mac 硬件 ID; ping 网络以触发 ARP;在对 arp-a 的响应中搜索相关的 mac ID,如果成功定位,则打印日期和时间。
两个问题-
1)目前我只是在搜索 2 个 mac 地址,但未来它更有可能是 20。我如何修改我的 detect_mac 函数以获取二维数组(或类似数组)并循环遍历结果以避免重复 if any(address in str_output for address in input_address_list1): 行 20 次。
2) 如果我让这个脚本持续运行(运行之间有 10 分钟的计时器),这个 python 最终会崩溃吗?是否需要考虑某种垃圾收集、日志溢出等?
import pdb, os
import subprocess
import re
import time
from subprocess import Popen, PIPE, DEVNULL
lower=1
upper=25
MAC_address_list1 = ["58:e2:zz:xx:28:d7"]
MAC_address_list2 = ["08:05:xx:zz:75:c5"]
MAC_address_list3 = ["##:##:##:##:##:##"]
MAC_address_list4 = ["##:##:##:##:##:##"]
p = {}
# Get The Current Date and Time
def getdatetime():
import time
return time.strftime("%H:%M %d/%m/%Y ")
def detect_mac(input_address_list1, input_address_list2):
# Assign list of devices on the network to "output"
output = subprocess.check_output("arp -a", shell=True)
str_output = output.decode("utf-8")
if any(address in str_output for address in input_address_list1):
print(getdatetime() + str(input_address_list1))
if any(address in str_output for address in input_address_list2):
print(getdatetime() + str(input_address_list2))
#sleep 10 minutes
time.sleep(600)
return True
while 1:
# ping all IPs in range to make ARP available
for i in range(lower,upper):
ip = "192.168.1.%d" % i
p[ip] = Popen(['ping', '-n', '-w5', '-c3', ip], stdout=DEVNULL)
detect_mac(MAC_address_list1, MAC_address_list2)
【问题讨论】:
标签: python arrays memory garbage-collection