2

我尝试执行一个嗅探串行端口并在标准输出上打印的命令。该命令连续运行,它不会退出或停止。当我使用 putty SSH 控制台时,我可以在控制台上看到不断更新的数据。

我能够发送命令并开始跟踪。当我尝试使用 Paramiko 通道读取输出数据时,使用该recv函数读取。我观察到它没有捕获嗅探器发出的所有数据。

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
4

2 回答 2

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)
于 2013-12-08T13:13:09.303 回答
0

您是否会仅获得前 2,048 个字节?

Channel.recv()将要读取的字节数作为参数。如果要读取更多字节,则需要增加此数字。例如,channel.recv(4000)将打印前 4,000 个字节。

于 2013-06-01T10:31:13.827 回答