0
リモートサーバーにsshして、scpやyumなどのシェルスクリプトを実行します。paramiko SSHClientを使用して継続的に出力する方法
すべてがうまくいったのは、scpの進行状況やyumのダウンロードの進行状況などのsthoutを連続的に取得できないことです。 f.read
はブロックされ、何も返されません。
私はparamikoが偽のstdoutストリームを1行ずつ転送するかもしれないが、それらのプログレッシブ出力はラインセパレータではなく '\ r'を出力すると思います。
この問題を解決する方法はありますか。 ssh
がNバイトが読み込まれたか、EOFを取得するだけparamiko.SSHClient()
def read_buffer_line(f):
line = ""
while not f.channel.exit_status_ready():
c = f.read(1)
if c == '\n':
yield line
line = ''
else:
line += c
yield line + f.read()
def ssh_run(ssh, cmd):
stdin, stdout, sterr = ssh.exec_command(cmd, get_pty=True, bufsize=1)
for l in read_buffer_line(stdout):
print l
それが動作します。ありがとう.. –