2

シリアルポートをスニッフィングして stdout に出力するコマンドを実行しようとしました。コマンドは継続的に実行され、終了または停止しません。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 に答える