我将在Python上编写一个SSH通信器类。我有telnet communicator类,我应该使用telnet等函数。 Telnet通信器具有read_until和read_very_eager功能。
read_until : Read until a given string is encountered or until timeout.
read_very_eager : Read everything that's possible without blocking in I/O (eager).
我找不到SSH通信器的这些功能。有什么想法吗?
答案 0 :(得分:1)
您没有在问题中说明,但我假设您根据标记使用Paramiko。
read_until
:读取直到遇到给定的字符串或直到超时。
对于特定的高级任务来说,这似乎是一个非常专业的功能。我想你需要实现这个。您可以使用paramiko.Channel.settimeout设置超时,然后循环读取,直到获得所需的字符串或超时异常。
read_very_eager
:在I / O(渴望)中不加阻塞地阅读所有可能的内容。
Paramiko并没有直接提供这个,但它确实为非阻塞I / O提供了原语,你可以很容易地把它放在一个循环中,以便在通道上可用的所有东西中啜饮。你尝试过这样的事吗?
channel.setblocking(True)
resultlist = []
while True:
try:
chunk = channel.recv(1024)
except socket.timeout:
break
resultlist.append(chunk)
return ''.join(resultlist)
答案 1 :(得分:1)
我认为它可能对你有帮助....
一个观察,告诉我你是否找到解决方案。 如果删除第6行,我将无法获得输出。我实际上是打印第6行以了解状态,后来我发现应该调用recv_exit_status()来执行此代码。
import paramiko,sys
trans = paramiko.Transport((host, 22))
trans.connect(username = user, password = passwd)
session = trans.open_channel("session")
session.exec_command('grep -rE print .')
session.recv_exit_status()
while session.recv_ready():
temp = session.recv(1024)
print temp
1. 阅读>搜索您要搜索的数据并打破循环
2. Read_very_eager >使用上面提到的代码。