如何检查是否存在SSH主机名解析错误

时间:2014-05-15 14:29:18

标签: python error-handling subprocess scp

我使用Python自动使用scp从网络传感器上复制二进制文件。我想添加一些错误检查,我无法弄清楚如何可靠地检查SSH是否抛出错误,例如主机名解析错误。我目前正在使用.communicate()来收集stdout,然后匹配" ssh"在错误消息中。我之所以检查错误是否以" ssh"是因为如果没有抛出错误,那个错误的变量包含它登录的传感器的横幅,所以我真的没有办法可靠地检查错误是否实际上有一个值(如果那讲得通)。如果找不到文件或抛出其他错误,我也会检查错误代码。有更好的方法吗?

这是目前正在运行的代码:

    sp = Popen(['scp', '@'.join([self.user, self.sensor]) + ':{0}{1}'.format(self.binPath, self.binName), self.storePath], stdout = PIPE, stderr = PIPE)
    data, error = sp.communicate()

    if error.startswith("ssh"):
        print("ERROR: {}".format(error))
    else:
        if sp.returncode == 1:
            print("ERROR:  {} - No such file or directory".format(self.binPath + self.binName))
        elif sp.returncode == 0:
            self.hashCMP(self.storePath, self.binName, md5Sum)
        else:
            pass

1 个答案:

答案 0 :(得分:0)

这方面的一种方法是为域创建测试吗?例如使用类似的东西:

      from socket import getaddrinfo
      result = getaddrinfo("www.google.com", None) 
      print result[0][4]

我注意到你正在使用popen - 如果你的操作系统有nc(netcat),你可以运行命令:

      nc -v <host> <port> #I believe this uses the getaddrinfo under the hood as well ;-)

谢谢, // P