timmy revisó este gist 10 months ago. Ir a la revisión
Sin cambios
timmy revisó este gist 10 months ago. Ir a la revisión
Sin cambios
timmy revisó este gist 10 months ago. Ir a la revisión
Sin cambios
timmy revisó este gist 10 months ago. Ir a la revisión
1 file changed, 43 insertions
network_connection_checker.py(archivo creado)
| @@ -0,0 +1,43 @@ | |||
| 1 | + | import subprocess | |
| 2 | + | import platform | |
| 3 | + | import time | |
| 4 | + | ||
| 5 | + | def ping_once(host): | |
| 6 | + | """ | |
| 7 | + | 使用系統的 ping 指令對指定 host 發送一次封包, | |
| 8 | + | 回傳 True 代表 ping 成功,False 代表失敗。 | |
| 9 | + | """ | |
| 10 | + | # 根據作業系統決定參數:Windows 用 -n,其他平台用 -c | |
| 11 | + | param = '-n' if platform.system().lower() == 'windows' else '-c' | |
| 12 | + | command = ['ping', param, '1', host] | |
| 13 | + | try: | |
| 14 | + | # 不顯示輸出 | |
| 15 | + | result = subprocess.run(command, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) | |
| 16 | + | return result.returncode == 0 | |
| 17 | + | except Exception as e: | |
| 18 | + | print(f"呼叫 ping 指令發生例外:{e}") | |
| 19 | + | return False | |
| 20 | + | ||
| 21 | + | def is_network_connected(host='8.8.8.8', attempts=5, success_threshold=3, delay=1): | |
| 22 | + | """ | |
| 23 | + | 透過連續 ping 嘗試判斷網路連線狀態: | |
| 24 | + | - attempts: ping 嘗試次數 | |
| 25 | + | - success_threshold: 成功次數達此值才視為連線正常 | |
| 26 | + | - delay: 每次 ping 之間的等待秒數 | |
| 27 | + | """ | |
| 28 | + | success_count = 0 | |
| 29 | + | for i in range(attempts): | |
| 30 | + | if ping_once(host): | |
| 31 | + | success_count += 1 | |
| 32 | + | print(f"[{i+1}/{attempts}] Ping 成功") | |
| 33 | + | else: | |
| 34 | + | print(f"[{i+1}/{attempts}] Ping 失敗") | |
| 35 | + | # 避免連續發送太快 | |
| 36 | + | time.sleep(delay) | |
| 37 | + | return success_count >= success_threshold | |
| 38 | + | ||
| 39 | + | if __name__ == '__main__': | |
| 40 | + | if is_network_connected(): | |
| 41 | + | print("網路連線正常") | |
| 42 | + | else: | |
| 43 | + | print("網路連線有問題") | |
Siguiente
Anterior