zoukankan      html  css  js  c++  java
  • 使用python远程登录

    最近要使用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 = ' '  
    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/

  • 相关阅读:
    Android声音和视频播放
    Android使用Pull生成XML
    Android实现图片倒影效果
    Android实现XML解析技术
    Android实现翻页功能原理
    Android实现获取系统应用列表(转)
    mini6410移植全攻略(2)uboot移植之搭建项目框架
    linux下tar.gz、tar、bz2、zip等解压缩、压缩命令小结
    脚本与环境变量设置
    /etc/profile和 . profile 文件
  • 原文地址:https://www.cnblogs.com/jxrichar/p/3916291.html
Copyright © 2011-2022 走看看