iT邦幫忙

0

使用while迴圈,在def函式中間加入ping的判斷

請問各位大神
小弟因工作需求才開始接觸python selenium自動化測試,level:幼幼班
所使用的是while迴圈
想寫的是:
在def函式的中間加入一段ping的判斷式
ping成功則繼續往下將def函式跑完
ping失敗即停止
加入的位置如圖片所示
請問我該如何去實現
https://ithelp.ithome.com.tw/upload/images/20211202/20144422xhFPXnEWUA.jpg

2 個回答

1
黃彥儒
iT邦高手 1 級 ‧ 2021-12-02 19:34:30

pip3 install icmplib

from icmplib import pin
ping(address, count=4, interval=1, timeout=2, id=None, source=None, family=None, privileged=True, **kwargs)
galen0101 iT邦新手 5 級 ‧ 2021-12-03 14:38:23 檢舉

感謝大哥撥空回答
已經安裝icmplib後
仍無法執行
icmplib仍顯示紅色下底線

2
japhenchen
iT邦超人 1 級 ‧ 2021-12-03 07:35:49

用系統的ping

import platform
import subprocess

def ping(host):
    parameter = '-n' if platform.system().lower()=='windows' else '-c'

    command = ['ping', parameter, '1', host]
    response = subprocess.call(command)

    if response == 0:
        return True
    else:
        return False
        
print(ping("www.google.com"))
galen0101 iT邦新手 5 級 ‧ 2021-12-03 15:07:15 檢舉

感謝大哥撥空回答
先說聲抱歉,是我表達的不清楚
補充說明一下
產品為router
在router mode與ip passthrough mode(IPPT)間切換,每一次切換完成後
去執行ping的動作
確保在切換完成後,網路是正常的

在我寫的def函式中,
是由roter切換到IPPT,再從IPPT切回router
以上為一個cycle
目前想要實現的是
從roter切換到IPPT後,做一次ping的判斷
若fail即停止
若pass則繼續切換回router後再次執行ping判斷,pass,則完成一次cycle
想判斷的位置就如上圖所示的位置
並不是在整個while迴圈完去執行ping

我自已也有參考網路上寫的ping方式,如下:
import os

def ping(host):
response = os.system("ping -c 1 " + host)

if response == 0:
    return True
else:
    return False

print(ping("www.google.com"))

但如果將此段加入,會有另外一個狀況
假設我需要測試100次
當我在第一次切換到IPPT時
就會顯示第一次結束
若整個cycle跑完
會變成第2次結束
實際上才執行一次完整的cycle而已

請問有辦法實現我想要的方式嗎
感謝!

我要發表回答

立即登入回答