【发布时间】:2015-10-28 08:39:57
【问题描述】:
我正在使用 paramiko 在远程机器上通过 ssh 执行一个长时间运行的 python 脚本。像魅力一样工作,到目前为止没有问题。
不幸的是,stdout(分别为stderr)仅在脚本完成后才会显示!但是,由于执行时间的原因,我更希望在打印时输出每个新行,而不是之后。
remote = paramiko.SSHClient()
remote.set_missing_host_key_policy(paramiko.AutoAddPolicy())
remote.connect("host", username="uname", password="pwd")
# myScript produces continuous output, that I want to capture as it appears
stdin, stdout, stderr = remote.exec_command("python myScript.py")
stdin.close()
for line in stdout.read().splitlines():
print(line)
如何做到这一点? 注意:当然可以将输出通过管道传输到一个文件并通过另一个 ssh 会话“减少”该文件,但这非常难看,我需要一个更干净,理想的pythonic解决方案:)
【问题讨论】:
-
只是为了以后帮助别人,myScript.py应该包含sys.stdout.flush()
标签: python ssh stdout paramiko interactive