【发布时间】:2020-04-23 18:10:58
【问题描述】:
我正在尝试从 python 控制 interactive ssh 会话 - 所以不运行 ssh user@host command(有很多答案)但 ssh user@host 然后写入/读取该 ssh来自 Python 的会话。
我尝试过的总是以:
import subprocess as sp
import sys
ssh_cmd = ["ssh", "-tt", "whoever@myhost"]
proc = sp.Popen(ssh_cmd, stdin=sp.PIPE, stdout=sp.PIPE, stderr=sp.PIPE)
while True:
stdin = raw_input('enter command: ')
proc.stdin.write(b'%s\n' % stdin)
问题是如何读取proc.stdout:
-
proc.stdout.readlines()不起作用,因为它从不返回 EOF,所以它会阻塞 -
proc.stdout.readline()在有一行数据准备好的情况下有效,但proc.stdout在为空时不返回 '' 因此无法读取它,如果没有数据则阻塞 -
select和poll总是说proc.stdout已经“准备好”阅读,无论proc.stdout.readline()是否真的有效。
有什么建议吗?
编辑:这里的代码是 python2.7,但 python3 的解决方案也可以。
编辑:在这里使用proc.communicate() 不是一个选项,因为它等待进程完成,我想继续读/写它。
【问题讨论】:
标签: python python-2.7 ssh