Есть ли способ использовать os.system в for? - PullRequest
0 голосов
/ 07 мая 2019

Я создал bash-скрипт, который нацелен на вывод информации об IP-адресе, MAC-адресе, уровне сигнала и имени устройства об устройстве, когда оно подключено к точке доступа.Я хочу использовать вместо Python, поэтому я переписываю его.

Когда я выполняю код, он печатает только MAC-адрес и уровень сигнала и, похоже, ничего не делает с циклами for.Также мне нужно использовать некоторую конкатенацию строк, например, используя переменные python внутри os.system (), но для этого я прочитал, что мне нужно использовать конкатенацию строк как простой способ ее реализации.

Первый циклчтобы найти беспроводной интерфейс, 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 В этой строке кода я попытался использовать интерфейс вместо 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\" \""
...