Получение списка профилей WiFi с Python - PullRequest
0 голосов
/ 31 августа 2018

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

subprocess.call(["for", "/f", "\"tokens=2*delims=:\"", "%a", "in", "(', "netsh", "wlan", "show", "profiles')", "do", "(if", "\"%a\"", "neq", "\"\"", "echo(%a)"])

Я использовал print (), чтобы убедиться, что он правильно входил в cmd, и он дал мне:

for /f "tokens=2*delims=:" %a in ('netsh wlan show profiles') do (if "%a" neq "" echo(%a)

Предыдущий пакетный файл был:

@echo off
set "flag="
(for /f "tokens=1*delims=:" %%a in ('netsh wlan show profiles') do (
    if "%%a"=="User profiles" set flag=true
    if defined flag if "%%~b" neq "" (
        for /f "tokens=*" %%c in ("%%~b") do echo(%%c
    )
))>out.txt
type out.txt

Я получаю ошибку:

Exception in Tkinter callback Traceback (most recent call last): File "C:\Users\AppData\Local\Programs\Python\Python37\lib\tkinter\__init__.py", line 1702, in __call__ return self.func(*args) File "C:\Users\Documents\Test.py", line 83, in WirelessFiltering subprocess.call(["for", "/f", "\"tokens=2*delims=:\"", "%a", "in", "('netsh", "wlan", "show", "profiles')", "do", "(if", "\"%a\"", "neq", "\"\"", "echo(%a)"]) File "C:\Users\AppData\Local\Programs\Python\Python37\lib\subprocess.py", line 304, in call with Popen(*popenargs, **kwargs) as p: File "C:\Users\AppData\Local\Programs\Python\Python37\lib\subprocess.py", line 756, in __init__ restore_signals, start_new_session) File "C:\Users\AppData\Local\Programs\Python\Python37\lib\subprocess.py", line 1155, in _execute_child startupinfo) FileNotFoundError: [WinError 2] The system cannot find the file specified

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 31 августа 2018

Попробуйте, дайте мне знать, если это даст желаемый результат, пожалуйста.

import subprocess

a = subprocess.check_output(['netsh', 'wlan', 'show', 'profiles']).decode('utf-8').split('\n')
a = [i.split(":")[1][1:-1] for i in a if "All User Profile" in i]
for i in a:
    results = subprocess.check_output(['netsh', 'wlan', 'show', 'profile']).split('\n')
    try:
        print ("{}".format(i, results[0]))
    except IndexError:
        print format(i)

Он делает то же самое, что и ваш командный файл, только разница, здесь я специально получаю только строки, содержащие All User Profiles Он по-прежнему будет получать профили без него, но, очевидно, и нежелательные строки.

Как вы упомянули в комментарии, что вы хотите сделать это для удаленных компьютеров, вам нужно будет включить удаленный коммутатор с учетными данными домена .. Что-то вроде:

subprocess.check_output(['netsh', '-r', 'device', '-u ', 'domain\user', '-p', 'password', 'wlan', 'show', 'profiles']
...