我正在使用paramiko在服务器上编译程序。您可能知道编译需要花费大量时间,并且正在从此过程发送大量数据。由于我无法从shell命令获取要执行的命令的退出状态,因此我不得不等待数据发送给我,当它停止发送时,我可以继续执行下一个命令。
由于某些问题,这种做法不可靠:
- 程序仍可在不发送输出的情况下执行
- 如果recv_ready
返回false,我必须使用sleep命令才能保持低内存
- 使用睡眠命令是耗时的,因为我不知道在考虑这个过程之前“睡了”多少,所以我可以继续下一个
到目前为止,这是我的实际代码:
for command in commands:
shell.send( "%s\n" % command )
waited = 0
while True:
if shell.recv_ready():
x = shell.recv( 1024 )
if len( x ):
print x
shell.settimeout( 1 )
waited = 0
else:
time.sleep( 1 )
waited += 1
if waited > 10:
break
这对大多数情况都很好但是如果运行任务持续时间超过10秒,我的程序会转到下一个命令,因为他认为已经完成了。如果我将超时阈值增加到20秒,那么在执行每个命令之间会丢失20秒,考虑到大多数命令执行时间不到1-2秒这一事实,浪费了大量时间。
你们怎么建议我应该这样做?