【问题标题】:Python while wait 100 seconds and return True or FalsePython while 等待 100 秒并返回 True 或 False
【发布时间】:2019-02-25 19:18:15
【问题描述】:

我下面有python脚本,它检查ping是否成功,如果在100秒内成功,它将返回True。如果 ping 失败,它应该返回 False,但它不会返回 False,当 ping 成功时,它会返回 True。

任何人都可以修复下面的代码为什么它不返回 False

代码:

def ping(self,hostname):
        time_check = datetime.now()
        data = ""
        while not "Success" in data:
            time.sleep(1)
            data = self.pingCheck("ping 10.10.10.1 count 5")
            if (datetime.now()-time_check).seconds > 100:
                return False
        return True

【问题讨论】:

  • 检查 .total_seconds 而不是 .seconds。意义不同
  • 似乎对我有用。您确定 self.pingCheck("ping 10.10.10.1 count 5") 没有返回包含 "Success" 的内容吗?
  • 你能把pingCheck的代码也贴出来吗?
  • 对不起大家,这是我的错误 pingCheck 是多了一个计时器,它确实 sys.exit()..我可以删除这篇文章
  • 你真的应该。像这样的屏幕外错误对未来的读者来说并没有真正的用处。

标签: python python-2.7 function while-loop


【解决方案1】:

下面的代码对你有用:

import time

def ping(self, hostname, try_for=100):
    t_end = time.time() + try_for
    is_succeed = False
    while time.time() < t_end or is_succeed:
        time.sleep(1)
        data = self.pingCheck("ping 10.10.10.1 count 5")
        is_succeed = "Success" in data
    return is_succeed

我已将等待时间定义为名为@9​​87654322@ 的参数,其默认值设置为100,但您可以传递您希望等待主机可用性的任何其他秒数。

【讨论】:

  • @Mad Physicist 我明白你的意思,只是认为另一种方法可能更清洁。
  • 我并不反对您构建代码的方式。只是 SO 是一个问答网站,旨在帮助尽可能多的遇到类似问题的人。说“这将起作用”并在没有解释的情况下转储一些代码并不能真正实现该目标。尝试解释不明显的。为什么OP的代码不起作用?为什么你的更好?
猜你喜欢
  • 2021-09-27
  • 1970-01-01
  • 1970-01-01
  • 2011-01-17
  • 2020-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多