我正在建立与远程服务器的远程SSH连接,并运行特定命令来转储数据库表。远程服务器是一个强化的Linux操作系统,它有自己的shell。我正在运行远程sql类型的命令来转储大量数据。我的python脚本使用交互式SSH会话来执行此操作。正如您在下面看到的,我正在运行一个命令,让它睡眠5秒钟,然后转储缓冲区。我已经为“remote_conn.recv()”函数尝试了许多不同的选项,但我无法获得完整的输出。输出非常大,并且它被分页(按空格更多)。我甚至没有得到第一页的完整输出。如果第一页上有50行,我只会获得前4行。
有更好的方法吗?我怎样才能抓住完整的输出?以下是我剧本中的Paramiko部分。
# Create instance of SSHClient object
remote_conn_pre = paramiko.SSHClient()
# Automatically add untrusted hosts
remote_conn_pre.set_missing_host_key_policy(
paramiko.AutoAddPolicy())
# initiate SSH connection
remote_conn_pre.connect(options.ip, username=options.userName, password=options.password)
# Use invoke_shell to establish an 'interactive session'
remote_conn = remote_conn_pre.invoke_shell()
remote_conn.send("<remote sql command here>")
time.sleep(5)
output = remote_conn.recv(65535)
print output
remote_conn.close()
答案 0 :(得分:0)
我能够通过抓取缓冲区的较小块并将它们连接在一起直到我在缓冲区中找到某个字符串来获得完整输出。
while True:
data = remote_conn.recv(500)
if "<string>" in data:
break
else:
finalOutput += data