Python: ошибка оболочки сохраняется в текстовом файле во время обработки ошибок

#python #subprocess

#python #подпроцесс

Вопрос:

Я новичок в python, и у меня нет большого опыта в программировании. Я пытаюсь создать скрипт на python с использованием модулей подпроцесса и ОС, который при выполнении откроет командную строку и запросит у пользователя имя WiFi, а затем скрипт создаст текстовый файл, в котором он сохранит вывод профиля. Он отлично работает, сохраняя вывод профиля в текстовом файле, но проблема в том, что когда пользователь вводит неверные данные, он сохраняет саму ошибку в текстовом файле, который я хочу отобразить в командной строке.

 import subprocess
import os


def get_wifi_name():
    os.system('color A')
    os.system('cls')
    profile = input("n[-]Enter name of previously connected WiFi: ")
    output = subprocess.getoutput('netsh wlan show profile '   profile   ' key=clear')
    return profile, output


profile_name, output_content = get_wifi_name()

if output_content == "Profile "   profile_name   " is not found on the system.":
    os.system("nPlease enter valid WiFi Network")
else:
    f = open('WiFi.txt', 'w')
    f.write(output_content)
    f.close()
 

Комментарии:

1. os.system является устаревшим, и вы должны переместить все в подпроцесс. subprocess.communicate вернет обычный результат и сообщение об ошибке отдельно, и у вас будет лучший контроль над ними

2. os.system("nPlease enter valid WiFi Network") должно быть либо os.system("echo Please enter valid WiFi Network") или print("nPlease enter valid WiFi Network")

3. Вы должны просто проверить is not found on the system , появляется ли output_content он. if "is not found on the system" in output_content: …

Ответ №1:

Вы забыли добавить здесь двойные кавычки:

если output_content == ‘Профиль "' profile_name '" не найден в системе.’:

Это должно сработать:

 import subprocess
import os

def get_wifi_name():
    os.system('color A')
    os.system('cls')
    profile = input("n[-]Enter name of previously connected WiFi: ")
    output = subprocess.getoutput('netsh wlan show profile '   profile   ' key=clear')
    return profile, output


profile_name, output_content = get_wifi_name()

if output_content == 'Profile "'   profile_name   '" is not found on the system.':
    print("nPlease a enter valid WiFi Network")
    input("npress <enter> to exit")
else:
    f = open('WiFi.txt', 'w')
    f.write(output_content)
    f.close()
    print("nFile saved successfully")
    input("npress <enter> to exit")
 

Комментарии:

1. мы использовали print() , потому что os.system() будет оценивать первое слово из заданной строки как команду , а строка начинается с «пожалуйста», что не является командой cmd , также мы использовали input() после печати чего-либо, потому что cmd автоматически завершит работу, если другие команды не выполняются (в случае запускафайлы python), если мой ответ сработал для вас, пожалуйста, рассмотрите accepting его: D