我正在编写python脚本,以使用SNMP检查远程系统上的时间。我在这个脚本中使用了模块子进程pytz、datetime和time。
该代码的预期工作是,它将使用子进程获取远程系统的当前时间,并将其与使用模块pytz、datetime和time获得的实际时间进行比较。问题是,当我使用这个脚本获取时间差时,它不会以秒为单位得到正确的时间差。有人能帮我吗?
# Finding remote time
snmp_remote_ts = subprocess.run(["/usr/bin/snmpwalk", "-r", "3", "-c", "{}".format(snmp_community), "-v", "{}".format(snmp_ver), "{}:{}".format(remote_host,snmp_port), "{}".format(OID_hrSystemDate)], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
remote_time = snmp_remote_ts.stdout.decode().split()[-1].replace(","," ").split(".")[0]
remote_ts = int(time.mktime(datetime.datetime.strptime(remote_time, "%Y-%m-%d %H:%M:%S").timetuple()))
# Finding actual time of provided timezone
actual_time_now = int(datetime.datetime.now(timezone(remote_tz)).timestamp())
# Finding time difference
time_diff = actual_time_now - remote_tssnmp_remote_ts的输出如下:
>>> snmp_remote_ts.stdout.decode()
'HOST-RESOURCES-MIB::hrSystemDate.0 = STRING: 2022-2-6,13:59:40.0,+5:30\n'
>>>发布于 2022-02-06 11:42:11
我通过重写代码解决了这个问题,如下所示:
# Finding remote time
snmp_remote_ts = subprocess.run(["/usr/bin/snmpwalk", "-r", "3", "-c", "{}".format(snmp_community), "-v", "{}".format(snmp_ver), "{}:{}".format(remote_host,snmp_port), "{}".format(OID_hrSystemDate)], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
remote_time = snmp_remote_ts.stdout.decode().split()[-1].replace(","," ").split(".")[0]
remote_ts = datetime.datetime.strptime(remote_time, "%Y-%m-%d %H:%M:%S")
# Finding actual time of provided timezone
actual_time_now = datetime.datetime.now(timezone(remote_tz)).replace(tzinfo=None,microsecond=0)
# Finding time difference
time_diff = actual_time_now - remote_ts
time_diff_seconds = time_diff.seconds谢谢你们的帮助!
https://stackoverflow.com/questions/71004862
复制相似问题