почему subprocess.check_output вызывает ошибку CalledProcessError - PullRequest
0 голосов
/ 02 мая 2020

Я пытался по-разному, но я не могу понять эту проблему .. Я не эксперт в python Может ли кто-нибудь объяснить, как я могу решить эту проблему ... plzzz

command = "netsh wlan show profile"
ssid = subprocess.check_output(command, shell=True)
ssid = ssid.decode("utf-8")
ssid_list = re.findall('(?:Profile\s*:\s)(.*)', ssid)
for ssid_name in ssid_list:
    subprocess.check_output(["netsh","wlan","show","profile",ssid_name,"key=clear"])

и выдает ошибку:

Traceback (most recent call last):
  File "C:/Users/Prakash/Desktop/Hacking tool/Execute_sys_cmd_payload.py", line 18, in <module>
    subprocess.check_output(["netsh","wlan","show","profile",ssid_name,"key=clear"])
  File "C:\Users\Prakash\AppData\Local\Programs\Python\Python38\lib\subprocess.py", line 411, in check_output
    return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
  File "C:\Users\Prakash\AppData\Local\Programs\Python\Python38\lib\subprocess.py", line 512, in run
    raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command '['netsh', 'wlan', 'show', 'profile', 'Prakash_WiFi\r', 'key=clear']' returned non-zero exit status 1.

Process finished with exit code 1

1 Ответ

0 голосов
/ 02 мая 2020

При check_output это исключение будет вызываться всякий раз, когда команда завершается ненормально, как указано ненулевым кодом возврата.

Возможное решение - вместо этого использовать subprocess.run , Это запустит процесс и вернет экземпляр CompletedProcess, который имеет атрибут returncode, который вы можете проверить;

import subprocess as sp

command = ["netsh","wlan","show",ssid_name,"key=clear"]
netsh = subprocess.run(command, shell=True, stdout=sp.PIPE)
if netsh.returncode != 0:
    print(f'netsh error: {netsh.returncode}')
else:
   # process netsh.stdout.

Из чтения этой страницы Похоже, что вы должны использовать команду netsh wlan show (без профиля).

...