我正在编写一个python脚本,我正在监视网络状态。我在Raspberry pi
使用Python 2.7
。如果网络不可用,脚本首先会检查网络凭据是否仍保存在文件wpa_supplicant.conf
(/etc/wpa_supplicant/wpa_supplicant.conf)
中。如果没有保存,那么脚本会在文件中写入ssid和密码并运行以下命令启动wlan0连接到wifi:
ret = subprocess.call(['sudo /sbin/ifup --force wlan0'], shell=True)
if ret is 0:
print("Connection successfully")
else:
print("Unable to connect")
这将wifi连接到给定的ssid。
现在问题是上面的命令如果成功运行则返回0。但是,让我们说如果此时wifi网络不可用,它仍会显示0.我们如何检测到我们尝试连接的网络不可用。
感谢。
答案 0 :(得分:0)
接口具有称为管理和操作状态的内容。
管理状态(在代码中称为管理状态)表示如果链接是UP / DOWN,则可以在物理链接更改状态或admin shut/no shut
时使用CLI(命令链接接口)。
操作状态(在代码中称为 operstate )与协议UP / DOWN状态有关,这在ARP解析且接口获取IP地址时发生。如果管理员状态为DOWN,则运行状态也将下降。这可以使用命令cat /sys/class/net/wlp2s0/operstate
进行检查,其中wlp2s0
是我的wifi接口。
根据您的需要,您可以使用/sys/class/net/wlp2s0/operstate
来查找界面的状态。有关详细信息,请查看此link。
以下是我机器上的输出片段:
mdeore@mdeore-Lenovo:~$ awk '{ split(FILENAME, array, "/"); print array[5] ": " $1 }' $(find /sys/class/net/*/operstate ! -type d)
enp1s0: down
lo: unknown
wlp2s0: up