Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当IP处于活动/活动状态时,如何远程登录和收集日志?_Python_Subprocess_Telnet_Ping_Os.system - Fatal编程技术网

Python 当IP处于活动/活动状态时,如何远程登录和收集日志?

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再次出现

平:

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再次出现时,我必须再次开始收集日志。如果你能在这方面帮助我,那就太好了

我找到了解决方案:

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)