저는 Paramiko를 사용하여 많은 명령을 실행하고 추가 분석을 위해 결과를 수집합니다. 가끔씩 첫 번째 명령의 결과는 시간 안에 완전히 되돌아 와서 두 번째 명령의 출력으로 끝납니다.Paramiko : 명령간에 데이터가 수신되도록하는 방법
이 문제를 설명하기 위해 recv_ready를 사용하려고 시도하고 있지만 제대로 작동하지 않아 내가 잘못하고 있다고 가정합니다. 관련 코드는 다음과 같습니다.
pause = 1
def issue_command(chan, pause, cmd):
# send commands and return results
chan.send(cmd + '\n')
while not chan.recv_ready():
time.sleep(pause)
data = chan.recv(99999)
ssh = paramiko.SSHClient()
ssh.load_system_host_keys()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
chan = ssh.connect(host, port=22, username=username, password=password, timeout=3,)
resp1 = issue_command(chan, pause, cmd1)
resp2 = issue_command(chan, pause, cmd2)
이러한 명령의 출력은 상대적으로 적습니다 (몇 문장). 일시 중지를 늘리면 문제가 해결되지만 이상적인 해결책은 아닙니다.
모든 제안이나 권장 사항에 감사드립니다.
나는 이것이 옳은 길에 있다고 생각합니다. – KMS
나는 이것이 옳은 길로 나를 데려 갔다고 생각한다. 고맙습니다. 발행 된 각 명령에 대해 새 연결 및 전송을 만들어서 ssh.connect 및 transport 문을 issue_command 함수로 옮길 필요가있었습니다. 결과는 지금까지 좋았습니다. – KMS
이 솔루션은 작동 할 수는 있지만 총알 방지는 아닙니다. 채널 스트림이 닫히기 전에'recv_ready()'가'False '를 반환 할 수 있기 때문에 모든 데이터가 수신되기 전에 종료 될 수 있습니다. 추가 정보 : http://stackoverflow.com/a/39019370/2075565 – Ivan