使用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 = '\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/

转载于:https://www.cnblogs.com/jxrichar/p/3916291.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/293121.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android之SharedPreferences 存储复杂对象

用SharedPreferences存储一些常用的设置信息很方便,但是我们知道SharedPreferences只能存储一些简单的类型 如何用SharedPreferences来存储一些复杂的对象?下面以map为例,看看SharedPreferences 存储复杂对象的方法 如果想用SharedPreference…

.NET 云原生架构师训练营(设计原则设计模式)--学习笔记

▲ 点击上方“DotNet NB”关注公众号回复“1”获取开发者路线图学习分享 丨作者 / 郑 子 铭 这是DotNet NB 公众号的第180篇原创文章目录设计原则设计模式设计原则DRY (Dont repeat yourself 不要重复)KISS (Keep it stupid simple 简单到傻子都能看懂)YAGNI (You Arent Gon…

Linux下将数据文件的指定域读取到shell脚本中

Linux下将数据文件的指定域读取到shell脚本中这个例子说明了怎样在Linux下shell脚本中从数据文件读取特定的域(field)并进行操作。例如,假设文件employees.txt的格式是{employee-name}:{employee-id}:{department-name},以冒号进行…

qt qss设置字体大小_Qt编写自定义控件70-扁平化flatui

一、前言对于现在做前端开发人员来说,FlatUI肯定不陌生,最近几年扁平化的设计越来越流行,大概由于现在PC端和移动端的设备的分辨率越来越高,扁平化反而看起来更让人愉悦,而通过渐变色产生的质感色彩反而没有扁平化来得…

机器学习之决策树熵信息增量求解算法实现

此文不对理论做相关阐述,仅涉及代码实现: 1.熵计算公式: P为正例,Q为反例 Entropy(S) -PLog2(P) - QLog2(Q); 2.信息增量计算: Gain(S,Sv) Entropy(S) - (|Sv|/|S|)ΣEntropy(Sv); 举例: 转化数据输入: 5 14Outlook Sunny Sunny Overcast Rain Rain Rain …

centos6.4下安装jdk

centos安装好后一般默认安装好了openJDK,且在6.4版本下是jdk7,我们要将其卸载在安装jdk6 1.卸载默认安装好的jdk,按下图所示的命令行命令卸载jdk 2.将jdk安装包上传到/usr/local目录下(将jdk其安装到这个目录下,可用winSCP工具上传…

java之socket编程

一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输。 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一…

实践剖析.NET Core如何支持Cookie滑动过期和JWT混合认证、授权

【导读】为防止JWT Token被窃取,我们将Token置于Cookie中,但若与第三方对接,调用我方接口进行认证、授权此时仍需将Token置于请求头,通过实践并联系理论,我们继续开始整活首先我们实现Cookie认证,然后再次引…

python基础ppt_Python基础课件.ppt

Python基础课件.ppt 6.10 问题解答 (1)能不能像执行.exe文件那样执行.py文件呢? 在Windows上是不行的,但是,在Mac和Linux上是可以的,方法是在.py文件的第一行加上一个特殊的注释。 (2&#xff0…

导入BaiduMapSdkDemo报230错误解决思路

百度地图官网教程,官方论坛的指导文章都指引读者去使用默认的.android目录下的debug.keystore。然而却在官方的Demo中使用app根目录下的debug.keystore导致简单的错误一直迷路,记录一下自己的解决问题的思路。这其中暴露了我容易走弯路,并且容…

简单音乐播放实例的实现,Android Service AIDL 远程调用服务

2019独角兽企业重金招聘Python工程师标准>>> Android Service是分为两种: 本地服务(Local Service): 同一个apk内被调用 远程服务(Remote Service):被另一个apk调用 远程服务需要借…

C# 使用int.TryParse,Convert.ToInt32,(int)将浮点类型转换整数时的区别

int.TryParse,Convert.ToInt32,(int) 这几种类型在将浮点类型转换整数时是有差别Convert.ToInt32则会进行四舍五入int.TryParse只能转换整数,即浮点类型全部会返回0(int)不会进行四舍五入,只取整数部分,小数点部分完全舍弃using System;public class DoubleToInt{public …

每个女孩子起床后做的第一件事......

1 假如你暴富了(素材来源网络,侵删)▼2 当客服到底有多难?(素材来源网络,侵删)▼3 挺好的(素材来源网络,侵删)▼4 每个女孩子起床后做的第一件事&#xff…

java之InetAddress类和InetSocketAddress的使用

一、简介 InetAddress是Java对IP地址的封装,代表互联网协议(IP)地址;InetAddress对象的获取只能通过静态方法,比如根据主机名获取主机的ip地址封装对象: InetAddress addInetAddress.getByName("BOPZ…

国产知名老牌 PDF 工具正式开源

文 | Travis出品 | OSC开源社区(ID:oschina2013)「PDF 补丁丁」是开发者 wmjordan 所开发的一款适用于 Windows 系统的多功能 PDF 文档工具箱,开发者最早于 2009 年开始了该程序的开发,如今已有十二年历史,…

.net Repeater知识知多少

&#xff08;一&#xff09;.net中使用Repeater绑定数据&#xff0c;并使用repeater循环出的两个值&#xff0c;赋给repeater中的div的value值。详细如下&#xff1a; 前端.net代码&#xff1a; <div class"wytz_xmlb_nr clear"><asp:Repeater ID"RpBi…

Centos Missing Library: QtWebKit.so.4

/*********************************************************************   Centos Missing Library: QtWebKit.so.4* 说明&#xff1a;* 这是测试在Centos上运行烧机程序时遇到的问题&#xff0c;记录一下解决办法。* * 2016-9…

目瞪口呆!137亿年的宇宙演化,竟然如此震撼!简直颠覆想象....

▲ 点击查看1968年圣诞节&#xff0c;阿波罗8号在环月球轨道上拍摄了一张照片。这是地球拥有的第一张自拍。也让人类第一次感受到&#xff0c;原来在广阔无垠的宇宙中&#xff0c;地球不过是一个美丽而又珍贵的孤岛。1990年&#xff0c;旅行者1号完成了所有的观测使命&#xff…