Скрипт извлечения Wi-Fi для Linux

Я только что написал скрипт, который извлекает пароли Wi-Fi из системы, как я могу улучшить этот скрипт и сделать его чище?

import subprocess
import shlex
import os


file_path = "/etc/NetworkManager/system-connections/"
wifi_data = os.listdir(file_path)
print("    ")
data = []
for file in wifi_data:
    spaceless_wifi_path_data  = file.replace(" ", "\\ ")
    cmd = f"cat /etc/NetworkManager/system-connections/{spaceless_wifi_path_data}"
    args = shlex.split(cmd)
    p = subprocess.Popen(args,
              stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    data.append(p)

parsed_data = str([data[i].communicate() for i in range(len(data))]).split("\\")
wifi_id_list = [line[4:] for line in parsed_data if 'nid' in line]


keys = [keys[5:] for keys in parsed_data if "npsk" in keys]


gap = len(wifi_id_list) - len(keys)


for missing in range(gap):
    keys.append("No keys has found")


results = list(zip(wifi_id_list[::-1], keys))


for ID, PASS in results:
    print(f"WiFi ID: {ID},  Password: {PASS}")

Как этот код можно улучшить с точки зрения меньшего количества используемых переменных и большего количества списков. Просто такое ощущение, что читать не удобно.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
246
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам не нужно использовать cat и запускать подпроцесс для чтения содержимого файла. Это немного упрощает сценарий. Я также думаю, что понимание списка не подходит для этой задачи, и вы должны просто построить результат, перебирая файлы.

import os
path = "/etc/NetworkManager/system-connections/"
wifi_id = []
keys = []
for file in os.listdir(path):
    with open(path + file, 'r') as f:
        content = f.read()
        for line in content.split('\n'):
            if line.startswith("nid"):
                wifi_id.append(line[4:])
            if line.startswith("npsk"):
                keys.append(line[5:])
        if len(keys) != len(wifi_id):
            keys.append("Keys not found")

results = list(zip(wifi_id, keys))

Другие вопросы по теме