我在Raspberry Pi上有一个Python/Flask web应用程序,它调用以下bash脚本(connect_-to-u-wifi)来连接wifi:
sudo killall wpa_supplicant
sudo wpa_supplicant -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf
sudo dhclient wlan0
基本上,用户输入他们的WiFi凭证,这些凭证保存在wpa_supplicant.conf
中,然后运行这个脚本。它工作得很好…但是,如果他们输入错误的凭据,dhclient会在失败之前永远挂起。在
我要做的是在继续使用dhclient之前检测凭据是否正确。我知道,如果creds错误,我可以检查wpa_supplicant
命令的输出是否有4次握手失败,但是当我通过以下方式从Python应用程序调用此脚本时:
未捕获sudo wpa_supplicant -i...
行的任何输出。我只想在检测到握手失败时立即结束,但在Python中捕获输出时遇到了困难。在
它不能解决Python问题,但是(假设您能够修改BASH脚本),您可以在BASH脚本中放置一个循环来检查
iw wlan0 link
的输出,并等待它返回成功消息或达到超时计数器。在建立连接之前,它将返回“Not Connected”。在只需在调用dhclient之前执行该操作,并且应该相当确定要在其上运行的有效连接。在
大致如下:
约翰·布拉德的回答非常干净和可靠,但我很难让它一直有效,因为我对它的评论:
最后,在这个答案的帮助下,我所做的是使用
wpa_supplicant
的-f标志,并将wpa_supplicant的输出写入一个文件。while循环然后返回connected状态,在这种情况下,它将调用dhclient
。如果没有连接,它将超时或导致4次握手失败(如果是后者,脚本将提前结束)。在相关问题 更多 >
编程相关推荐