【问题标题】:Creating simple if statement in Python when pining IP address绑定 IP 地址时在 Python 中创建简单的 if 语句
【发布时间】:2016-07-04 19:14:35
【问题描述】:

我正在使用:Windows 我正在尝试在 ping ip 地址时创建一个简单的if 语句

import os
hostname = "192.168.8.8." #example
response = os.system("ping -c 1 " + hostname)

#and then check the response...
if response == 0:
    print hostname, 'is down'

else:
  print hostname, 'is up'

print response

我对此很陌生,但无论我输入的 ip 地址是什么,有效与否,它都会显示它已启动。

【问题讨论】:

    标签: python ip ping


    【解决方案1】:

    os.system() 返回进程退出值。 0 表示成功。

    在您的情况下,它已成功执行,因此返回 0。您所要做的就是从 ping 命令获取完整的输出,然后进行字符串比较以确定该 IP 是否有效。

    你需要使用subprocess's checkoutput method

    import subprocess
    
    hostname = "google.com"
    batcmd="ping -n 1 " + hostname
    result = subprocess.check_output(batcmd, shell=True)
    if "Received = 1" in result:
        print "Is UP"
    else:
        print "Is Down"
    

    【讨论】:

      【解决方案2】:

      使用我的答案here 的变体删除接口参数subprocess.check_call

      from subprocess import check_call, CalledProcessError, PIPE
      
      def is_reachable(i, add):
          command = ["ping", "-c", i, add]
          try:
              check_call(command,sdout=PIPE)
              return True
          except CalledProcessError as e:
              return False
      
      if is_reachable("3", "127.0.0.01"):
       # host is reachable
      else:
           # not reachable
      

      在 Windows 上,您可能需要添加参数 "-w", "2999" 才能为无法访问的主机的错误级别返回 0 以外的值,因为即使调用不成功,返回码也会为零,windows-7-get-no-reply-but-sets-errorlevel-to-0

      你也可以使用check_output,专门检查Destination host unreachable是否在输出中:

       return "Destination host unreachable" in check_output(command)
      

      【讨论】:

        【解决方案3】:

        您做的一切都很好,唯一的问题是您将正确的输出 0 与错误的输出(即高于 0 的所有内容)混淆了。

        import os
        hostname = "192.168.8.8." #example
        response = os.system("ping -c 1 " + hostname)
        
        #and then check the response...
        if response == 0:
            print hostname, 'is up'
        
        else:
          print hostname, 'is down'
        
        print response
        

        【讨论】:

        • 如果那是真的,它总是会说出来吗?
        • 可能他输入的IP一直是错误的或者无效的。如果需要,您可以检查代码。您建议其他功能的回复不涉及 OP 问题。
        • 但无论我输入的 IP 地址是否有效,它都表示它已启动 应该是不言自明的,它在两个方向上都不会出错
        • 我说如果你有一个成功的调用,AKA 你通过使用 ping 命令到达主机,你会得到 0 退出代码。如果你没有到达主机或者你输入错误的命令,你会得到不同于 0 的东西。
        • 您在 Linux / Mac 上工作吗?如果是这样的话,对不起,我无法在 Windows 上进行检查。您可以尝试使用 localhost 或 stackoverflow.com 作为主机名。
        猜你喜欢
        • 1970-01-01
        • 2016-09-27
        • 2020-08-15
        • 2020-02-22
        • 2019-04-16
        • 2022-01-02
        • 2023-03-23
        • 1970-01-01
        • 2019-03-17
        相关资源
        最近更新 更多