forked from bellwether/minerva
fixed watch, ensured flushing of everything
This commit is contained in:
parent
94820beccc
commit
58f3d7074f
1 changed files with 22 additions and 14 deletions
|
|
@ -1,10 +1,19 @@
|
|||
from fabric import Connection
|
||||
import os
|
||||
import sys
|
||||
import threading
|
||||
import select
|
||||
import tempfile
|
||||
import io
|
||||
|
||||
|
||||
def flush_data(data, pipe, display=None):
|
||||
pipe.write(data)
|
||||
pipe.flush()
|
||||
if display:
|
||||
display.write(data)
|
||||
display.flush()
|
||||
|
||||
# Bare machine, not necessarily associated with AWS
|
||||
class Remote:
|
||||
def __init__(self,
|
||||
|
|
@ -77,8 +86,13 @@ class Remote:
|
|||
channel.shutdown_write()
|
||||
|
||||
# read stdout/stderr to prevent read block hangs
|
||||
out.write(channel.recv(len(channel.in_buffer)))
|
||||
err.write(channel.recv_stderr(len(channel.in_stderr_buffer)))
|
||||
flush_data(channel.recv(len(channel.in_buffer)),
|
||||
out,
|
||||
(watch and sys.stdout.buffer))
|
||||
|
||||
flush_data(channel.recv_stderr(len(channel.in_stderr_buffer)),
|
||||
err,
|
||||
(watch and sys.stderr.buffer))
|
||||
|
||||
timeout = 60
|
||||
|
||||
|
|
@ -96,21 +110,16 @@ class Remote:
|
|||
break
|
||||
for c in readq:
|
||||
if c.recv_ready():
|
||||
data = channel.recv(len(c.in_buffer))
|
||||
out.write(data)
|
||||
out.flush()
|
||||
flush_data(channel.recv(len(c.in_buffer)),
|
||||
out,
|
||||
(watch and sys.stdout.buffer))
|
||||
got_chunk = True
|
||||
|
||||
if watch:
|
||||
sys.stdout.write(data)
|
||||
if c.recv_stderr_ready():
|
||||
data = channel.recv_stderr(len(c.in_stderr_buffer))
|
||||
err.write(data)
|
||||
err.flush()
|
||||
flush_data(channel.recv_stderr(len(c.in_stderr_buffer)),
|
||||
err,
|
||||
(watch and sys.stderr.buffer))
|
||||
got_chunk = True
|
||||
|
||||
if watch:
|
||||
sys.stderr.write(data)
|
||||
# for c
|
||||
|
||||
"""
|
||||
|
|
@ -144,7 +153,6 @@ class Remote:
|
|||
thread.start()
|
||||
|
||||
if not disown:
|
||||
print("joining")
|
||||
thread.join()
|
||||
|
||||
return (open(out.name, "rb"), open(err.name, "rb"), thread)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue