【发布时间】:2017-05-06 08:22:46
【问题描述】:
我有一个工作代码,可以分块从 ssh 连接的标准输出中检索数据,检查每个块末尾的模式匹配,并通过标准输入发回适当的响应。
ssh = paramiko.SSHClient()
...
transport = ssh.get_transport()
session = transport.open_session()
session.set_combine_stderr(True)
session.get_pty()
stdin = session.makefile('wb', -1)
stdout = session.makefile('rb', -1)
session.exec_command(cmd)
for chunk in iter(lambda: session.recv(9999), ""):
if re.search('Password: $', chunk):
stdin.write(sudo_pw + '\n')
stdin.flush()
output += chunk
现在我有一个子进程,我使用它在本地执行命令,如下所示:
p = Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=STDOUT)
(output, err) = p.communicate()
如何实现与分块分析输出并通过标准输入发送适当响应的完全相同的逻辑?我正在寻找不使用 pexpect 的解决方案。
【问题讨论】:
标签: python subprocess stdout stdin pexpect