我尝试执行一个嗅探串口并在stdout上打印的命令。该命令连续运行,不会退出或停止。当我使用putty SSH控制台时,我可以在控制台上看到数据不断更新。
我可以发送命令并启动跟踪。当我尝试使用recv
函数使用Paramiko通道读取输出数据时。我观察到它没有捕获嗅探器发出的所有数据。
检查recv
状态后,我执行recv_ready
操作。
以下是代码。如何避免错过数据?
ssh= paramiko.SSHClient()
ssh.load_system_host_keys()
ssh.connect('host.example.com')
channel = ssh.get_transport().open_session()
channel.get_pty()
channel.exec_command("sniff /dev/stty2")
while(True):
if(channel.recv_ready): # Doesnt get triggered often
print channel.recv(2048) # Reads only a part of the data
答案 0 :(得分:2)
我在这里遇到同样的问题,我找到了解决方案,
也许不是一个伟大的,但它适用于我
这是一段代码,希望对此有所帮助:)
while True:
if channel.recv_ready():
break
time.sleep(2)
channel.send('exit\n')
stdout_data = []
try:
part = channel.recv(4096)
while part:
stdout_data.append(part)
part = channel.recv(nbytes)
except:
raise
print 'exit status: ', channel.recv_exit_status()
print ''.join(stdout_data)
答案 1 :(得分:0)
你有没有机会获得前2,048个字节?
Channel.recv()
将您想要读取的字节数作为参数。如果要读取更多字节,则需要增加此数字。例如,channel.recv(4000)
将打印前4,000个字节。