Python 当IP处于活动/活动状态时,如何远程登录和收集日志?
平: Telnet:Python 当IP处于活动/活动状态时,如何远程登录和收集日志?,python,subprocess,telnet,ping,os.system,Python,Subprocess,Telnet,Ping,Os.system,平: Telnet: import os ip=1.1.1.1 o=os.system("ping "+ip) time.sleep(10) print(o) if res == 0: print(ip,"is active") 这里,中间IP下降。在此期间,我需要ping该IP&每当它出现时,我需要再次开始收集日志。我该怎么做 实际上,我需要通过telnet收集日志(这是不确定的)。我能做到。在这个过程中,我收集日志的IP会下降。所以,我需要跟踪这个IP(Ping)。每当IP再次出现
import os
ip=1.1.1.1
o=os.system("ping "+ip)
time.sleep(10)
print(o)
if res == 0:
print(ip,"is active")
这里,中间IP下降。在此期间,我需要ping该IP&每当它出现时,我需要再次开始收集日志。我该怎么做
实际上,我需要通过telnet收集日志(这是不确定的)。我能做到。在这个过程中,我收集日志的IP会下降。所以,我需要跟踪这个IP(Ping)。每当IP再次出现时,我必须再次开始收集日志。如果你能在这方面帮助我,那就太好了
我找到了解决方案:
tn = telnetlib.Telnet(IP)
tn.write(command+"\r\n")
f=open(filename,w)
while True:
response = tn.read_until("\n")
f.write(response)
也许这就是你要找的
此代码段将启动ping进程并阻塞,直到看到输出“bytes from”或超时(默认情况下为1分钟):
时间可以是任何东西。不仅仅是一分钟。你可以将它设置为更高的值,比如24小时=86400秒<代码>等待直到联机(“example.com”,timeout=86400)如果您真的希望它无限期运行,您可以捕获
peexpect.timeout
异常并重试。谢谢您AndréLaszlo。对不起,如果我没有说清楚的话。实际上,我需要通过telnet收集日志(这是不确定的)。我能做到。在这个过程中,我收集日志的IP会下降。所以,我需要跟踪这个IP(Ping)。每当IP再次出现时,我必须再次开始收集日志。如果你能在这方面帮助我,那就太好了。尝试以下方法:1)正常收集日志,2)捕获与主机停机(超时等)相关的任何异常,3)使用上述功能等待主机恢复4)转到1“隐藏控制台”似乎是一个单独的问题(StackOverflow上已经有几个关于它的问题)。如果你找到了满意的解决方案;将其作为答案发布,而不是编辑问题。如果主机在tn.read\u直到(“\n”)
call期间停机,会发生什么情况?@Sebastin:如果主机停机,则在阻塞时,它会跟随else部分不执行。因此,直到(“\n”)它才遇到tn.read\u。如果删除os.system()
并允许tn.read\u直到(“\n”)
运行,会发生什么情况?
tn=telnetlib.Telnet(IP)
tn.write(command+"\r\n")
f=open(filename,w)
while (os.system("ping -n 1 IP") == 0):
response = tn.read_until("\n")
f.write(response)
else:
call some module for telnetting again/goto
But, here is it possible to hide the console when we use (os.system(ping)). I know it can be done through subprocess. But since os.system is a one liner & very easy to verifY the result also.
import pexpect
def wait_until_online(host, timeout=60):
child = pexpect.spawn("ping %s" % host)
child.expect("bytes from", timeout)