2017-08-26 105 views
0

我正在編寫一個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

這可以幫助https://stackoverflow.com/questions/31868486/list-all-wireless-networks-python-for-pc – Kallz

回答

0

接口有東西叫做管理操作狀態。

  • 管理狀態(在其代碼稱爲管理狀態)指如果鏈路UP/DOWN這可以在物理鏈路改變狀態或管理員shut/no shut使用CLI(命令Link接口)發生的情況。

  • 操作狀態(在其代碼稱爲operstate)涉及協議UP/DOWN狀態下,發生這種情況時ARP解決和接口獲得IP地址。如果Admin狀態爲DOWN,則運行狀態也會關閉。這可以使用命令cat /sys/class/net/wlp2s0/operstate來檢查,其中wlp2s0是我的wifi接口。

您的需求,您可以使用/sys/class/net/wlp2s0/operstate找出接口的狀態。欲瞭解更多詳情,請查詢link

以下是輸出的我的機器上的代碼片段:

[email protected]:~$ awk '{ split(FILENAME, array, "/"); print array[5] ": " $1 }' $(find /sys/class/net/*/operstate ! -type d) 
enp1s0: down 
lo: unknown 
wlp2s0: up 
相關問題