我使用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
答案 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