我的第一个Python编码
import pexpect
try:
for host in open('HK5700IPs.txt','r').readlines():
print(host)
#switchIP = host.strip('\\n')
switchIP = host
telnet = 'telnet ' + switchIP
switchPassword = "password"
switchEnable = 'screen-length 0 temporary'
commandTorun = 'display current-configuration interface'
#Login to the switch
t = pexpect.spawn(telnet)
t.expect('Password:')
# t.sendline('sup')
# t.expect('word:')
t.sendline(switchPassword)
t.expect('>')
t.sendline(switchEnable)
t.expect('>')
#Send the command
t.sendline(commandTorun)
t.expect('return')
data = t.before.decode('utf-8') #最重要的一点,不能直接转为str必须用转码的方式
#Closing the Telnet Connection
t.sendline('quit')
#t.expect('>')
#t.sendline('quit')
t.expect(pexpect.EOF)
#Opening the file and writing the data to it
f = open('Temp.txt','w')
f.write(data)
f.close()
new_configure = open(switchIP.strip('\n') + '_config.txt', 'w')
f2 = open('Temp.txt','r')
# f.close()
lines = f2.readlines()
for line in lines: #读每一行的配置
if "#" in line:
new_configure.write(line)
elif "interface GigabitEthernet" in line: #找寻端口配置命令,并生成配置命令
new_configure.write(line)
elif "traffic-policy P5M inbound" in line: #找寻对应的端口下是否有限速的配置命令,并生成配置命令
new_configure.write(" undo traffic-policy inbound\n traffic-policy P5Mnew inbound\n ")
elif "traffic-policy P10M inbound" in line: #找寻对应的端口下是否有限速的配置命令,并生成配置命令
new_configure.write(" undo traffic-policy inbound\n traffic-policy P10Mnew inbound\n ")
f.close()
new_configure.close()
print(host+"finish")
except Exception as e:
print ("The Script failed to login")
print (str(e))
第一次写出用于工作的编码。
用途,批量生成修改命令。
几个坑说一下:
1、pexpect 无法在window上运行。虽然官方给出的对应的替代命令,但是对应的命令还是不能在windows上运行。
2、刷出来的代码在处理的时候,出向bytes的问题。
在python3里面的收到数据会被当为bytes类型。
但是后面的使用write()的时候,要求填写的内容必须是str。
一开始我使用直接转码的方式进行,结果导致文件里面都是换行符。后面的程序也没有办法执行。
data = str(t.before)
python3 bytes转 str导致 文件都是换行符合 \r\n