码迷,mamicode.com
首页 > 编程语言 > 详细

使用python远程登录

时间:2014-08-16 13:44:10      阅读:283      评论:0      收藏:0      [点我收藏+]

标签:blog   http   color   使用   os   io   strong   for   

最近要使用python做一个在web上管理交换机的程序,需要远程登录,就查了点资料,由于还没有搞到交换机,就先用自己的机器测试一下。

首先python的标准库中包含telnet,用起来也很方便,查看一下文档写了个小程序:

 

[python] view plaincopy
  1. #!/usr/bin/env python  
  2. #coding=utf-8  
  3.   
  4. import telnetlib  
  5.   
  6. host = "127.0.0.1"  
  7. userName = ‘root‘  
  8. password = ‘123456‘  
  9. enter = ‘\n‘  
  10.   
  11. t = telnetlib.Telnet(host)  
  12.   
  13. t.read_until("login: ",1)  
  14. t.write(userName + enter)  
  15.   
  16. t.read_until("Password: ",1)  
  17. t.write(password + enter)  
  18.   
  19. t.write("ls"+enter)  
  20. t.write("exit"+enter)  
  21.   
  22. print t.read_all()  


输出结果:

 

 

[plain] view plaincopy
  1. Last login: Wed Nov  2 14:51:36 on console  
  2. shi-kefumatoiMac:~ root# .CFUserTextEncoding    .subversion     Library  
  3. .forward        .viminfo        nat.sh  
  4. .sh_history     .vimrc          noc  
  5. shi-kefumatoiMac:~ root# logout  

 

 

程序很简单,登录自己的机器,执行ls命令,然后输出结果。

 

telnet很好用,但是总是有人喜欢更强大更好用的程序,于是就有了pexpect,pexpect 是 Don Libes 的 Expect 语言的一个 Python 实现,是一个用来启动子程序,并使用正则表达式对程序输出做出特定响应,以此实现与其自动交互的 Python 模块。 Pexpect 的使用范围很广,可以用来实现与 ssh、ftp 、telnet 等程序的自动交互;可以用来自动复制软件安装包并在不同机器自动安装;还可以用来实现软件测试中与命令行交互的自动化。

看了写资料,也用pexpect写了一个小程序,实现刚才同样的功能:

 

[python] view plaincopy
  1. #!/usr/bin/env python  
  2. #coding=utf-8  
  3.   
  4. import pexpect  
  5.   
  6. address = ‘127.0.0.1‘  
  7. userName = ‘root‘  
  8. password = ‘123456‘  
  9. cmd = ‘telnet ‘ + address  
  10. prompt = ‘[$#>]‘  
  11.   
  12. child = pexpect.spawn(cmd)  
  13. index = child.expect([‘login‘,pexpect.EOF,pexpect.TIMEOUT],timeout=1)  
  14. if index == 0:  
  15.     child.sendline(userName)  
  16.     index = child.expect(‘Password‘,timeout=1)  
  17.     child.sendline(password)  
  18.     child.expect(prompt,timeout=1)  
  19.     child.sendline(‘ls‘)  
  20.     child.expect(‘ls‘,timeout=1)  
  21.     child.expect(prompt,timeout=1)  
  22.     print child.before  
  23. else:  
  24.     print ‘expect "login",but get EOF or TIMEOUT‘  
  25.   
  26. child.close()  

输出结果:

 

 

[plain] view plaincopy
  1. .CFUserTextEncoding .subversion     Library  
  2. .forward        .viminfo        nat.sh  
  3. .sh_history     .vimrc          noc  
  4. shi-kefumatoiMac:~ root  


当然,这个程序只是pexpect的一个实例程序,简单介绍的它的简单用法,还不足以说明它t的强大。


参考资料:

 

python文档:http://docs.python.org/library/telnetlib.html

IBM developerWorks: http://www.ibm.com/developerworks/cn/linux/l-cn-pexpect1/

   http://www.ibm.com/developerworks/cn/linux/l-cn-pexpect2/

使用python远程登录,布布扣,bubuko.com

使用python远程登录

标签:blog   http   color   使用   os   io   strong   for   

原文地址:http://www.cnblogs.com/jxrichar/p/3916291.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!