- 论坛徽章:
- 0
|
本帖最后由 ZX424 于 2010-05-26 00:49 编辑
由于工作要求,需要使用python的PEXPECT模块进行交换机配置文件的自动备份
本人刚接触python不久,写的代码又臭又长,请各位见谅- #!/usr/bin/python
- import sys
- import time
- import os
- import pexpect
- now = time.strftime("%y%m%d", time.localtime()) #取得系统日期
- os.mkdir("/var/ftp/%s" % now, 0777) #创建目录
- os.chmod("/var/ftp/%s" % now, 0777) #更改目录权限
- aa = open ('/var/ftp/%s/log.txt' % now, "w") #开启日志
- fout = open ('log.txt', "w")
- IP = open('1','r') #IP地址存放的文件
- PASS = open('2','r') #PASSWORD存放的文件
- while 1:
- READIP = IP.readline() #读取IP第一行
- READPASS = PASS.readline() #读取PASSWORD第一行
- if not READIP: #如果读完IPFILE最后一行,就跳出循环
- print 'END'
- break
- path = now + '/' + READIP
- foo = pexpect.spawn('telnet %s' % READIP) 创建连接
- foo.log_file = fout
- foo.expect(['Username:']) #等待字符串'Username:'
- foo.sendline('admin') #输出admin
- foo.expect(['Password:'])
- foo.sendline('admin')
- foo.sendline('en')
- foo.expect(['Password:'])
- foo.sendline(READPASS) #输出PASSWORD
- foo.expect(['#'])
- foo.sendline('copy flash:config.text ftp:') #通过FTP备份配置文件
- foo.expect(['Address or name of remote host'])
- foo.sendline('192.168.52.3') #FTP SERVER
- foo.expect(['config.text'])
- foo.sendline(path) #FTP上传名
- a = foo.expect (['bytes/sec', 'Error', pexpect.EOF, pexpect.TIMEOUT)
- if a == 0:
- aa.write('%s......ok\n' % READIP)
- foo.expect(['#'])
- foo.sendline('quit')
- if a == 1:
- aa.write('%s......failed\n' % READIP)
- foo.sendline('quit')
- foo.expect(['closed'])
- foo.interact
- # if not READIP: #(移动此3行至16行)
- # print 'END' #(移动此3行至16行)
- # break #(移动此3行至16行)
- print 'done'
复制代码 IPFILE里一共有3个IP地址
PASSWORDFILE里也存放着3个密码
但是执行完3个IP地址后他显示:
Traceback (most recent call last):
File "./python.py", line 19, in <module>
foo.expect(['Username:'])
File "/usr/local/lib/python2.5/site-packages/pexpect.py", line 589, in expect
return self.expect_list(compiled_pattern_list, timeout)
File "/usr/local/lib/python2.5/site-packages/pexpect.py", line 664, in expect_list
c = self.read_nonblocking (1, timeout)
理应是执行 print 'END'然后跳出循环,但是他又继续执行了 while 中的 foo.expect(['Username:'])
请问各位大虾,问题到底出在哪了呢?
同样,我又写了一段代码:- #!/usr/bin/python
- import sys
- import os
- IP = open('1','r')
- PASSWORD = open('2','r')
- while 1:
- READIP = file.readline()
- READPASSWORD = pafile.readline()
- print READIP
- print READPASSWORD
- if not READIP:
- print 'ok'
- break
复制代码 读完IP文件后 很正常的打印'OK' 并跳出循环了,但是为什么上面那个不行呢?诚请协助. |
|