Python 3 (Raspberry Pi 3B +, Stretch) Подключение к дискретному SSID без пароля Python (вызов команд Bash) - PullRequest
0 голосов
/ 13 ноября 2018

Немного предыстории ... Я использую Raspberry Pi 3B +, подключенный к гостевой сети Wi-Fi, чтобы регистрировать время на одном из наших тестовых приборов и публиковать его в онлайн-инструменте планирования через API, который автоматически регистрирует часы работы машины для определения времени тестирования. Гостевой Wi-Fi использует захваченный портал без пароля ssid и принудительно переподключается каждые 24 часа (я использую pyautogui, чтобы кликать по захваченному порталу, но не могу гарантировать, что список доступных сетей всегда будет постоянным, поэтому необходимо подключаться к дискретному SSID через код).

Проблемы с этим кодом:

1.) Он не выходит из кода при достижении p6. p6 выполняется, потому что он отключает Wi-Fi и повторно подключается к правильному ssid, но он не перемещается за линию p6. Я добавил оператор печати после p6, чтобы посмотреть, будет ли он печататься и не будет печататься. Как выйти из подпроцесса?

2.) Когда я физически отключаюсь от Wi-Fi, файл wpa_supplicant.conf содержит только информацию заголовка и удаляет ассоциацию блока "network {}". Когда я выполняю приведенный ниже код, он добавляет 2 идентичных блока «network {}» в файл wpa_supplicant.conf и восстанавливает сетевое соединение. Я просто не уверен, почему он добавляет его дважды.

3.) Есть предложения, как упростить этот код? Я знаю, это действительно ужасно, но это работает, и мне еще предстоит получить какие-либо ответы о том, как сделать это по-другому?

4.) Wi-Fi ssid, к которому я подключаюсь, не связан с паролем (работающий гостевой wifi с порталом авторизации, использующий pyautogui для перехода через портал авторизации) с ним, поэтому wpa_passphrase не является адекватным решением этой проблемы.

import subprocess

ssid="mySSID"
key_mgmt=None
scanWifi = "sudo wpa_cli scan"
addNtwk= "sudo wpa_cli add_network"

subprocess.Popen(scanWifi.split())
p1 = subprocess.Popen(addNetwk.split(), stdout=subprocess.PIPE)

setSSID = "sudo wpa_cli set_network {0} ssid {1}".format(p1.stdout, ssid)
setKeyMgmt = "sudo wpa_cli set_network {0} key_mgmt {1}".format(p1.stdout, key_mgmt)
enableNtwk = "sudo wpa_cli enable_network {0}".format(p1.stdout)
saveConfig = "sudo wpa_cli save_config"
reconfigNtwk = "sudo wpa_cli -i wlan0 reconfigure"

p2 = subprocess.Popen(setSSID.split())
p3 = subprocess.Popen(setKeyMgmt.split())
p4 = subprocess.Popen(enableNtwk.split())
p5 = subprocess.Popen(saveConfig.split())
p6 = subprocess.Popen(reconfigNtwk.split())

Заранее спасибо!

...