【发布时间】:2020-11-26 18:22:50
【问题描述】:
想要打开一个 ssh 会话,运行命令并在进程运行时实时获取输出(此基础将涉及在远程服务器上运行其他命令)
from subprocess import Popen, PIPE
with Popen(['ssh <server-domain-name>',
],shell=True,
stdin=PIPE, stdout=PIPE, stderr=PIPE,
universal_newlines=True) as ssh:
output1 = ssh.stdin.write('ls -l')
output2 = ssh.stdin.write('mkdir test')
status = ssh.poll()
print(output1)
print(output2)
到目前为止,这就是我所拥有的,使用ssh.communicate[<command>] 给出了正确的输出,但在第一个命令之后关闭了子进程,有什么想法吗?
【问题讨论】:
-
你确定标准输入应该是一个管道吗?
-
在这里使用
shell=True是错误的,但恰好在 Windows 上工作。不过,您真的想尽可能避免使用shell=True。见Actual meaning ofshell=Trueinsubprocess;在这种情况下,请尝试Popen('ssh', server], ...),但正如您所发现的,您确实需要像 Paramiko 或 Expect 这样的高级库来与远程服务器上的交互式进程对话。
标签: python ssh subprocess