我想ssh到远程服务器并运行一些shell脚本(如scp或yum等)。
一切顺利,除了我不能得到像scp进展或yum下载进度一样的stdout。 f.read
将被阻止,没有任何回报。
我猜paramiko可以逐行传输假stdout流,但这些渐进输出不输出行分隔符,而是'\ r'。
反正有没有解决这个问题?
以下是我现在正在做的事情,其中qazxsw poi是qazxsw poi
ssh
paramiko.SSHClient()
仅在读取N个字节或EOF时返回。一旦有新数据,def read_buffer_line(f):
line = ""
while not f.channel.exit_status_ready():
c = f.read(1)
if c == '\n':
yield line
line = ''
else:
line += c
yield line + f.read()
def ssh_run(ssh, cmd):
stdin, stdout, sterr = ssh.exec_command(cmd, get_pty=True, bufsize=1)
for l in read_buffer_line(stdout):
print l
就会返回。
这对我来说很好:
stdout.read(N)