下面是对我所面临的问题以及我是如何应对的解释。
我也经历过这个问题是由于
接收到的stdout.channel.eof=0import paramiko
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect("1.1.1.1", username="root", password="pass")
stdin, stdout, stderr = client.exec_command("service XXX start")
stdin,stdout和stderr还在营业。。。>>> print stdin
>>
>>> print stdout
>>
>>> print stderr
>>
所以没有收到EOF。。。>>> print stdin.channel.eof_received
0
通常情况下,我接收到True,并且只能执行stdout.read(),但为了安全起见,我使用此解决方案(它有效!):
等待超时,强制stdout.channel.close(),然后强制stdout.read():>>> timeout = 30
>>> import time
>>> endtime = time.time() + timeout
>>> while not stdout.channel.eof_received:
... sleep(1)
... if time.time() > endtime:
... stdout.channel.close()
... break
>>> stdout.read()
'Starting XXX: \n[ OK ]\rProgram started . . .\n'
>>>
顺便说一句,我用的是:Python 2.6.6
paramiko (1.15.2)
希望这有帮助。。。