zoukankan      html  css  js  c++  java
  • python自动化运维五:pexpect

    pexpectexpect的封装,可以实现ssh,ftp,passwd,telnet等命令的自动交互。首先我们来先搭建一个FTP服务器做测试使用。windows下搭建FTP的方法如下:

    1 首先计算机右键选择管理,然后点击选择新用户

    二 设置用户名以及密码

    3 然后在控制面板中点击打开或关闭windows功能。要稍微等一下界面弹出来

    4 internet信息服务下勾选上所有的选项

    5 然后在程序开始命令框里输入IIS搜索出来如下:

    6 右键选择新建FTP站点

    7 按照下图进行设置,服务器就搭好了,在IE中输入ftp ://192.168.0.7就可以访问了

    下面用pexpect来实现一个ftp下载实现:

    def pexpect_functon_try():

    child=pexpect.spawn('ftp 192.168.0.7')

    child.expect('Name .*: ')

    child.sendline('ftp_user')

    child.expect('Password:')

    child.sendline('123')

    child.expect('ftp> ')

    child.sendline('get test.js')

    child.sendline('bye')


    (1)pexpect.spawn()是类接口,功能是启动和控制子程序应用,在这里我们使用ftp 192.168.0.7的命令来启动FTP

    (2)expect:为了控制子程序的输出,expect用于匹配子程序的输出结果,原型为expect(self,pattern,timeout=-1,searchwindow=None),pattern可以是正则表达式,也可以是正则表达式组成的列表。如果是列表,则expect返回的结果是匹配的列表索引。比如前面第一步执行了ftp 192.168.0.7后,在shell产生的结果如下:最后一行的结果为Name (192.168.0.7:root)。那么expect就应该匹配Name开头的行

     

    3child.expect('Name .*: ')用于匹配最后一行的命令。

    4)然后采用child.sendline()的方式发送命令传入用户名。

     (5)此时需要输入Password:因此expect继续匹配Password. child.expect('Password:')

    (6)child.sendline('123'):输入密码

    (7) 正式登陆成功,需要开始输入ftp命令。

    (8) child.expect('ftp> ')继续匹配ftp>

    (9)child.sendline('get test.js') 发送命令获取test.js文件。ls -al查看结果,成功获取到了test.js文件

    另外在整个过程中,我们也可以将所有的执行过程全部存入到log中去, 添加如下代码:

    fout=file('test.txt','w')

    child.logfile=fout

    结果如下,整个交互过程都保存了下来。

    当然pythonftplib也可以做到FTP下载。但是功能相比pexpect功能更多,pexpectrun函数还可以对外部命令进行调用。如下:

    def pexpect_functon_try_2():

    ret=pexpect.run('ls -al')

    print ret

    得到如下结果:

    total 92

    drwxr-xr-x 2 root root 4096 Aug 24 11:08 .

    drwxr-xr-x 3 root root 4096 Jul 29 10:33 ..

    -rw-r--r-- 1 root root 1154 Jul 30 14:22 chapter1.py

    -rw-r--r-- 1 root root 3380 Aug 20 15:13 chapter2.py

    -rw-r--r-- 1 root root 256 Aug 20 21:55 chapter3.py

    -rw-r--r-- 1 root root 398 Aug 21 10:48 chapter4.py

    -rw-r--r-- 1 root root 589 Aug 24 11:23 chapter5.py

    -rw-r--r-- 1 root root 54 Aug 24 11:10 test.js

    -rw-r--r-- 1 root root 46976 Aug 20 15:41 test.png

    -rw-r--r-- 1 root root 6433 Aug 20 15:41 test.svg

    -rw-r--r-- 1 root root 227 Aug 24 11:10 test.txt

  • 相关阅读:
    Jersey Politics
    网络流——最小费用最大流
    网络流——最大流Dinic算法
    【洛谷2756】飞行员配对方案问题(二分图匹配,网络流24题)
    状压dp入门
    2018九江市赛
    [CQOI2007]余数求和
    CSAPC2008 skyline
    [ZJOI2009]函数 题解
    由不定方程想到的——数论选讲
  • 原文地址:https://www.cnblogs.com/zhanghongfeng/p/7422212.html
Copyright © 2011-2022 走看看