을 폐쇄 신호 방식. read() '는 클라이언트 쪽에서 너무 낮은 수준을 유지하지 않고 영원히 멈추지 않습니다. 지금까지 나는에 의해 완성 된 명령 (표준 출력 간단한 텍스트 출력) 실행 의사 소통을 할 수 있었다 :Paramiko 서버는 : 표준 출력 클라이언트는</strong>, 나는`표준 출력을 만드는 <code>stdout</code> 스트림을 닫는 방법 문제를 우연히 발견 한 테스트를위한 클라이언트를 수정할 필요없이 <code>paramiko</code><strong>에 테스트 서버를 구현하기 위해 노력
class FakeCluster(paramiko.server.ServerInterface):
def check_channel_exec_request(self,channel,command):
writemessage = channel.makefile("w")
writemessage.write("SOME COMMAND SUBMITTED")
writemessage.channel.send_exit_status(0)
return True
을하지만 난
_,stdout,_ = ssh.exec_command("<FILEPATH>")
stdout.channel.recv_exit_status()
stdout.channel.close()
print(stdout.read())
에 중간 두 줄을 피하기 위해 방법을 발견하지 않았습니다있는 이미 channel.exec_command
(here)으로 전화하지 않아도 좋은 해결 방법입니다. stdout
스트림을 닫지 않으면 출력이 인쇄되지 않고 서버의 기본 전송도 영원히 활성 상태로 유지됩니다.
정말 효과가 없습니다 stdout.channel.close()
으로 채널을 닫고 대안 I에 사용되는 paramiko.channel.ChannelFile
개체/O가 "더 속성 'fileno를'이 없다"스트림 때문에 os.close(writemessage.fileno())
은 (차이가 here 설명) 작동하지 않습니다 사용.
솔루션은 항상 클라이언트 측을 수정 할 here를 제안 .. 클라이언트에 대한 SSHException
를 throw 서버 측에서 직접 채널을 폐쇄,
또한 (자세한 설명은. here을 발견)하지만 내 클라이언트 스크립트를 사용하여 알고 실제 서버에서는 이러한 추가 라인이 없어도 가능할 것입니다!