2017-12-27 50 views
0

원격 서버에 ssh하고 scp 또는 yum 등의 쉘 스크립트를 실행하고 싶습니다.paramiko SSHClient를 사용하여 지속적으로 출력하는 방법

모든 점은 scp 진행 또는 yum 다운로드 진행과 같이 지속적으로 sthout을 얻을 수 없다는 점을 제외하고는 모두 잘 진행되었습니다. f.read이 차단되고 아무 것도 반환하지 않습니다.

paramiko는 가짜 stdout 스트림을 줄 단위로 전송할 수 있지만 이러한 프로 그래 시브 출력은 줄 구분 기호를 출력하지 않지만 '\ r'은 출력합니다.

어쨌든이 문제를 해결할 수 있습니까?

여기에 N 바이트가 읽은하거나 EOF를 얻을 때 sshparamiko.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 

답변

2

stdout.read(N) 만 반환이다 메신저, 지금은 doning 것입니다. stdout.channel.recv(N)은 새로운 데이터가 제공되는 즉시 반환됩니다.

이 나를 위해 잘 작동 :

stdin, stdout, sterr = ssh.exec_command(cmd, get_pty=True) 
while True: 
    v = stdout.channel.recv(1024) 
    if not v: 
     break 
    sys.stdout.write(v) 
    sys.stdout.flush() 
+0

그것을 작동합니다. 감사.. –