如何在 paramiko .recv 函数中接收大输出?
how to receive large output in paramiko .recv function?
我需要从 paramiko 中的 .recv 函数接收完整输出。我试图增加 nbyte 数,但在我看来,我认为这不是正确的方法。该脚本的主要目的是在同一会话中自动执行命令列表。
我这里的主要问题是我无法收到 shell.
的完整输出
环境:
- python v2.7.14
- paramiko v2.4.1
我的脚本代码:()
#!/usr/bin/env python
import sys,os,time
import paramiko
user = raw_input("Enter your username please: ")
upassword = getpass.getpass()
ip = "172.x.x.x"
username = "ikxxxx"
password = "xxxgdxx"
ofile = open("ipsadd.csv", "r")
def sshConnection(ip):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip, username=user, password=upassword)
connection = ssh.invoke_shell()
for line in ofile:
hostname = line.split(",")[0].strip()
print "\n\n"
print "Configuration running on: " + hostname
host = line.split(",")[1].strip()
print "IP: " + host
print "*" * 40
connection.send("ssh " + username + "@" + host + "\n")
time.sleep(1)
connection.send("\n")
time.sleep(2)
connection.send("yes" + "\n")
time.sleep(2)
connection.send(password + "\n")
time.sleep(1)
connection.send("screen-length 0 temporary" + "\n")
time.sleep(2)
connection.send("clear alarm al no-trap" + "\n")
time.sleep(2)
connection.send("Y\n")
connection.send("display device\n")
connection.send("display temperature\n")
connection.send("display device pic-status\n")
connection.send("display power\n")
connection.send("display health\n")
connection.send("display cpu-usage\n")
connection.send("display memory-usage\n")
connection.send("display alarm all\n")
connection.send("display switchover state\n")
connection.send("display startup\n")
connection.send("display version\n")
connection.send("display interface brief\n")
connection.send("display isis peer\n")
connection.send("display isis peer verbose\n")
connection.send("display bgp vpnv4 all peer\n")
connection.send("display bgp vpn4 all peer verbose\n")
connection.send("display bgp peer\n")
connection.send("display current-configuration\n")
time.sleep(1)
connection.send("q\n")
output = connection.recv(999999)
print output
break
sshConnection("179.x.x.x")
最后我发现 solution.I 在我的代码末尾添加了一个 While 循环,因此它将继续接收输出,直到出现 break 语句。
While True:
output = connection.recv(1024)
print output
if "condition" in output:
break
我需要从 paramiko 中的 .recv 函数接收完整输出。我试图增加 nbyte 数,但在我看来,我认为这不是正确的方法。该脚本的主要目的是在同一会话中自动执行命令列表。 我这里的主要问题是我无法收到 shell.
的完整输出环境:
- python v2.7.14
- paramiko v2.4.1
我的脚本代码:()
#!/usr/bin/env python
import sys,os,time
import paramiko
user = raw_input("Enter your username please: ")
upassword = getpass.getpass()
ip = "172.x.x.x"
username = "ikxxxx"
password = "xxxgdxx"
ofile = open("ipsadd.csv", "r")
def sshConnection(ip):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip, username=user, password=upassword)
connection = ssh.invoke_shell()
for line in ofile:
hostname = line.split(",")[0].strip()
print "\n\n"
print "Configuration running on: " + hostname
host = line.split(",")[1].strip()
print "IP: " + host
print "*" * 40
connection.send("ssh " + username + "@" + host + "\n")
time.sleep(1)
connection.send("\n")
time.sleep(2)
connection.send("yes" + "\n")
time.sleep(2)
connection.send(password + "\n")
time.sleep(1)
connection.send("screen-length 0 temporary" + "\n")
time.sleep(2)
connection.send("clear alarm al no-trap" + "\n")
time.sleep(2)
connection.send("Y\n")
connection.send("display device\n")
connection.send("display temperature\n")
connection.send("display device pic-status\n")
connection.send("display power\n")
connection.send("display health\n")
connection.send("display cpu-usage\n")
connection.send("display memory-usage\n")
connection.send("display alarm all\n")
connection.send("display switchover state\n")
connection.send("display startup\n")
connection.send("display version\n")
connection.send("display interface brief\n")
connection.send("display isis peer\n")
connection.send("display isis peer verbose\n")
connection.send("display bgp vpnv4 all peer\n")
connection.send("display bgp vpn4 all peer verbose\n")
connection.send("display bgp peer\n")
connection.send("display current-configuration\n")
time.sleep(1)
connection.send("q\n")
output = connection.recv(999999)
print output
break
sshConnection("179.x.x.x")
最后我发现 solution.I 在我的代码末尾添加了一个 While 循环,因此它将继续接收输出,直到出现 break 语句。
While True:
output = connection.recv(1024)
print output
if "condition" in output:
break