我已經創建了一個小型python腳本來監視OS(Linux)是否能夠ping 10.0.0.1(局域網上的路由器)的某個IP地址。這第一個腳本工作正常,但我必須執行腳本,讓它每次評估條件。Python檢查循環變化中的條件
我想我明白這個腳本只是在條件評估後退出。我試圖在下面的第二個例子中包含一個while循環,它計算OS調用的返回值,並將此函數調用放在循環中以繼續檢查路由器是否被插回局域網。
定義函數以評估ping狀態的正確方法是?我嘗試在最後一個示例中添加一個函數,但似乎沒有更新。
我的目標是,一旦運行該腳本,並使其檢測是10.0.0.1是漲還是跌,當我從網絡中斷開,或插回。
import os
import time
ip = "10.0.0.1"
response = os.system("ping -c 1 " +ip)
if response != 0:
print ip, 'is down'
time.sleep(3)
else:
print ip, 'is up!'
我嘗試添加雖然其他循環,但條件似乎並沒有得到更新。
import os
import time
ip = "10.0.0.1"
response = os.system("ping -c 1 " +ip)
while response != 0:
print ip, 'is down'
time.sleep(3)
else:
print ip, 'is up!'
我甚至嘗試定義機能的研究,以評估該循環的每次反覆的條件..
import os
import time
ip = "10.0.0.1"
response = os.system("ping -c 1 " +ip)
def checkstatus():
response = os.system("ping -c 1 " +ip)
while response != 0:
print ip, 'is down'
time.sleep(3)
checkstatus()# trying to evaluate if status has changed
while response != 1:
print ip, 'is up'
time.sleep(3)
checkstatus()# trying to evaluate if status has changed
編輯
我這是怎麼改劇本和現在它工作..只需要減慢網絡不可達標準輸出。連接
import os
import time
ip = "10.0.0.1"
while True:
response = os.system("ping -c 1 " + ip)
if response == 0:
print'connected'
time.sleep(.5)
新的輸出注意print語句出現爲連接
--- 10.0.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.383/0.383/0.383/0.000 ms
**connected**
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=0.308 ms
--- 10.0.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.308/0.308/0.308/0.000 ms
***connected***
新建輸出後拔出幾秒鐘(洪水屏)
connect: Network is unreachable
connect: Network is unreachable
connect: Network is unreachable
connect: Network is unreachable
connect: Network is unreachable
沒有什麼太不好但擔心這會使用很多CP U週期,因爲這個腳本將 在樹莓派上運行。
確保你'time.sleep(0.5)'是'if'聲明之外,否則它不會在執行失敗case(ping正在旋轉back2back)... –