我正在使用python来编写一个程序,该程序将对一个设备进行平压,如果它从设备中得到一个响应,则什么也不做,但是如果它没有收到任何响应,它会给我发一封电子邮件,通知我设备可能坏了。但是,如前所述,当来自ping的响应是“无法到达的目的地主机”时,返回值为0,这与接收到响应相同。所以我要找的是如何从实际的响应中识别出无法到达的目标主机,这样我就可以在这种情况下向我发送一封电子邮件(因为这意味着设备很可能关闭)。
import platform
import subprocess
import smtplib
import time
#Delay to wait for Rigs to Boot
#time.sleep(600)
a = 1
while 1==1:
#Ping other PC's
def myping(host):
parameter = '-n' if platform.system().lower()=='windows' else '-c'
command = ['ping', parameter, '1', host]
response = subprocess.call(command)
if response == 0:
return True
#Will Send email if response from ping is false (aka not pingable/down)
else:
gmail_user = 'email'
gmail_password = 'password'
sent_from = gmail_user
to = ['recepient']
subject = 'subject'
body = 'body'
email_text = """\
From: %s
To: %s
Subject: %s
%s
""" % (sent_from, ", ".join(to), subject, body)
try:
smtp_server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
smtp_server.ehlo()
smtp_server.login(gmail_user, gmail_password)
smtp_server.sendmail(sent_from, to, email_text)
smtp_server.close()
print ("Email sent successfully!")
except Exception as ex:
print ("Something went wrong….",ex)
#delay so i dont recieve spam emails while the 'while' loop runs
time.sleep(43000)
print(myping("ip to ping"))谢谢你提前提供帮助。
发布于 2022-01-16 04:55:03
显然,您不能改变ping的行为。但是,当然可以使用subprocess.check_output,它返回命令的输出,并对其进行解析。
像这样使用ping并不特别有用。您无法访问远程主机的原因有很多。可能您的本地网络已关闭,或您的路由器已死亡,或您的电缆已被拔出。
https://stackoverflow.com/questions/70727410
复制相似问题