我有一个问题,下面的函数remote. send("show run int vlan 1\n")不起作用。下面的代码,它能够读取文件,创建一个新文件,并写入和保存文件。然而,输出只包含交换机名称,没有别的,有时它会显示交换机名称和命令的字符或2。输出如下所示
开关测试1
IP地址www.example.com1.1.1.51
测试1 _2023年2月23日
成功登录到test1
测试1编号
开关测试2
IP地址www.example.com1.1.1.50
测试2 _2023年2月23日
成功登录到test2
测试2编号
刚开始学这门语言,我不确定是什么问题。提前感谢你。
myfile = open('c:\znet\device-list.txt','r')
count = 0
while True:
count = count + 1
line = myfile.readline()
if not line:break
else:
x = line.strip()
y,z =x.split(",",1)
print ("switch ",y)
print ("IP address ",z)
backupdate = str(date.today())
filename = y + "_" + backupdate
print (filename)
host = z
user = 'cisco'
password = 'cisco'
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy)
client.connect(hostname=host, username=user, password=password)
print ("Successfully log in to", y)
remote = client.invoke_shell()
remote.send("show run int vlan 1\n")
output = remote.recv(1048576)
print (output.decode('ascii'))
with open("{}.txt".format(filename),"w") as f:
print (output.decode('ascii'),file=f)
我希望在终端和创建的文件中看到vlan 1的配置(show run int vlan 1)。
1条答案
按热度按时间c2e8gylq1#
recv
不会返回整个输出。它不能。您正在使用shell(invoke_shell
)。shell是一个永不结束的间歇性数据流。唯一的结束是注销。也没有任何信号表明特定命令的完整输出已经结束。recv
返回你调用它时可用的任何数据。如果你想要完整的输出,您需要反复调用recv
,直到获得所有内容。这就是为什么通常不应该使用
invoke_shell
进行命令自动化的原因之一。参见What is the difference between exec_command and send with invoke_shell() on Paramiko?