基本上,如果您调用子进程,它将创建一个本地子进程而不是一个远程子进程,因此您应该与ssh进程进行交互。因此遵循以下原则:但是请注意,如果动态构建目录,则容易受到shell注入的影响,那么END行应该是唯一标识符。为避免END行问题的唯一性,最简单的方法是使用不同的ssh命令
from __future__ import print_function,unicode_literals
import subprocess
sshProcess = subprocess.Popen(['ssh',
<remote client>],
stdin=subprocess.PIPE,
stdout = subprocess.PIPE,
universal_newlines=True,
bufsize=0)
sshProcess.stdin.write("ls .\n")
sshProcess.stdin.write("echo END\n")
sshProcess.stdin.write("uptime\n")
sshProcess.stdin.write("logout\n")
sshProcess.stdin.close()
for line in sshProcess.stdout:
if line == "END\n":
break
print(line,end="")