我制作了一个 bash 脚本,旨在在设备连接到热点时打印有关设备的 IP、MAC 地址、信号强度和设备名称等信息。我想改用python,所以我正在重写它。
当我执行代码时,它只打印 mac 地址和信号强度,并且似乎对 for 循环没有任何作用。我还需要使用一些字符串连接,例如在 os.system() 中使用 python 变量,但为此我读到我必须使用字符串连接作为实现它的简单方法。
第一个循环是找到无线接口 wlan0,第二个是检索两个列表的数据:maclist 和 signallist,其中存储了 mac 地址和信号强度。
print("IP address" "\tHostname" "\tMAC address" "\tSignal")
leasefile="/var/lib/misc/dnsmasq.leases"
displayInterface = "iw dev | grep Interface | cut -f 2 -s -d\" \""
for interface in os.popen(displayInterface):
retrieveMac = "iw dev wlan0 station dump | grep Station | cut -f 2 -s -d\" \""
retrieveSignal = "iw dev wlan0 station dump | grep signal: | awk '{print $2}'"
maclist = []
listLength = len(maclist)
maclist.append(os.system(retrieveMac))
signallist = []
signallist.append(os.system(retrieveSignal))
for i in range(listLength):
ip = "UNKN"
host = ""
retrieveIP = "cut -f 2,3,4 -s -d" " "+"$"+leasefile+"| grep $"+maclist[i]+" | cut -f 2 -s -d\" \""
retrieveHost = "cut -f 2,3,4 -s -d" " "+"$"+leasefile+"| grep $"+maclist[i]+" | cut -f 3 -s -d\" \""
ip = os.system(retrieveIP)
host = os.system(retrieveHost)
print(ip +"\t"+host +"\t"+maclist[i] +"\t"+signallist[i])
输出是这样的:
IP address Hostname MAC address Signal
b8:27:eb:...
b4:9d:0b:...
-43
-32
它应该是这样的:
IP address Hostname MAC address Signal
192.16... dev name b8:27:eb:... -43
192.16... dev name b4:9d:0b:... -32
数据不是问题,因为命令本身可以正常工作,但它既是布局又是使用 os.system() 时显示的事实
PD 在这行代码中,我尝试使用 interface 而不是 wlan0 但它不起作用
retrieveMac = "iw dev wlan0 station dump | grep Station | cut -f 2 -s -d\" \""
retrieveMac = "iw dev "+interface+" station dump | grep Station | cut -f 2 -s -d\" \""