发布时间:2019-09-11 07:42:51编辑:auto阅读(1698)
python安装setuptools模块之后,便可使用easy_install来安装python的第三方扩展模块,默认安装路径是:
/usr/lib/python2.6/site-packages/
easy_install 模块名 #可以直接安装 easy_install pexpect [root@zhu ~]# easy_install pexpect Searching for pexpect Reading http://pypi.python.org/simple/pexpect/ Reading http://pexpect.readthedocs.org/ Reading http://pexpect.sourceforge.net/ Reading http://sourceforge.net/project/showfiles.php?group_id=59762 Best match: pexpect 3.1 Downloading https://pypi.python.org/packages/source/p/pexpect/pexpect-3.1.tar.gz#md5=5a8e1573062e2e2c203c9a6d213b16e7 Processing pexpect-3.1.tar.gz Running pexpect-3.1/setup.py -q bdist_egg --dist-dir /tmp/easy_install-KOPmVQ/pexpect-3.1/egg-dist-tmp-GnQBTg zip_safe flag not set; analyzing archive contents... Adding pexpect 3.1 to easy-install.pth file Installed /usr/lib/python2.6/site-packages/pexpect-3.1-py2.6.egg Processing dependencies for pexpect Finished processing dependencies for pexpect #由于pexpect-3.1-py2.6.egg此时仍是一个压缩文件,所以需要进行解压。 cd /usr/lib/python2.6/site-packages/ unzip pexpect-3.1-py2.6.egg
pexpect是一个用来启动子程序并对其进行自动控制的python模块,可以用来和ssh,ftp,telnet等需要输入密码的命令行程序进行自动交互。
安装过程如上。
另一种安装方法如下:
wget http://pexpect.sourceforge.net/pexpect-2.3.tar.gz tar xzf pexpect-2.3.tar.gz cd pexpect-2.3 python ./setup.py install
pexpect 模块的使用如下:
>>> pexpect. pexpect.EOF( pexpect.__path__ pexpect.run( pexpect.ExceptionPexpect( pexpect.__reduce__( pexpect.runu( pexpect.PY3 pexpect.__reduce_ex__( pexpect.searcher_re( pexpect.TIMEOUT( pexpect.__repr__( pexpect.searcher_string( pexpect.__all__ pexpect.__revision__ pexpect.select pexpect.__class__( pexpect.__setattr__( pexpect.signal pexpect.__delattr__( pexpect.__sizeof__( pexpect.spawn( pexpect.__dict__ pexpect.__str__( pexpect.spawnu( pexpect.__doc__ pexpect.__subclasshook__( pexpect.split_command_line( pexpect.__file__ pexpect.__version__ pexpect.struct pexpect.__format__( pexpect._run( pexpect.sys pexpect.__getattribute__( pexpect.codecs pexpect.termios pexpect.__hash__( pexpect.errno pexpect.time pexpect.__init__( pexpect.fcntl pexpect.traceback pexpect.__loader__ pexpect.os pexpect.tty pexpect.__name__ pexpect.pty pexpect.types pexpect.__new__( pexpect.re pexpect.which( pexpect.__package__ pexpect.resource
1.pexpect.run()函数的使用
run(command, timeout=-1, withexitstatus=False, events=None, extra_args=None, logfile=None, cwd=None, env=None) #默认情况下该指令: #1.运行给出的指令command,如果指令不是以绝对路径给出,会自动在PATH中寻找。结果输出作为字符串返回,行与行之间以\r\n分割。 #2.withexitstatus设置为True时,结果返回一个元组,(command_output, exitstatus) #events是一个字典,有模式和应答组成,可以自动输入内容,如果应答需要输入enter键时,此时需要为一个新行,即添加\n. >>> pexpect.run('cat /root/a.txt') 'qian shan\r\nniao fei jue\r\ndu diao han jiang xue\r\n' >>> pexpect.run('cat /root/a.txt',withexitstatus=1) ('qian shan\r\nniao fei jue\r\ndu diao han jiang xue\r\n', 0) >>> pexpect.run('scp /root/a.txt 192.168.56.102:/root',withexitstatus=1,events={'password': '123456\n'}) ("root@192.168.56.102's password: \r\n\ra.txt 0% 0 0.0KB/s --:-- ETA\ra.txt 100% 45 0.0KB/s 00:00 \r\n", 0)
2.pexpect.spawn()类的使用
spawn是Pexpect模块主要的类,用以实现启动子程序,它有丰富的方法与子程序交互从而实现用户对子程序的控制。它主要使用 pty.fork() 生成子进程,并调用 exec() 系列函数执行 command 参数的内容。
child = pexpect.spawn ('/usr/bin/ftp') #执行ftp客户端命令 child = pexpect.spawn ('/usr/bin/ssh user@example.com') #使用ssh登录目标机器 child = pexpect.spawn ('ls -latr /tmp') #显示 /tmp目录内容 child = pexpect.spawn ('/usr/bin/ftp', []) child = pexpect.spawn ('/usr/bin/ssh', ['user@example.com']) child = pexpect.spawn ('ls', ['-latr', '/tmp']) child = pexpect.spawn('some_command') fout = file('mylog.txt','w') child.logfile = fout
child = pexpect.spawn('ssh root@192.168.56.102') child.expect(self, pattern, timeout=-1, searchwindowsize=-1) 为了控制子程序,等待子程序产生特定输出,做出特定的响应,可以使用 expect 方法 在参数中: pattern 可以是正则表达式, pexpect.EOF , pexpect.TIMEOUT ,或者由这些元素组成的列表。需要注意的是,当 pattern 的类型是一个列表时,且子程序输出结果中不止一个被匹配成功,则匹配返回的结果是缓冲区中最先出现的那个元素,或者是列表中最左边的元素。使用 timeout 可以指定等待结果的超时时间 ,该时间以秒为单位。当超过预订时间时, expect 匹配到pexpect.TIMEOUT。
3.打印before的内容
>>> child = pexpect.spawn('ls -l') >>> child.expect(pexpect.EOF) 0 >>> print child.before 总用量 64 drwxr-xr-x. 3 root root 4096 4月 2 10:09 aaa -rw-r--r--. 1 root root 45 4月 3 15:01 a.txt drwxr-xr-x. 16 root root 4096 3月 6 21:36 biaozhunku drwxr-xr-x. 2 root root 4096 3月 27 17:03 mypython drwxr-xr-x. 2 root root 4096 4月 3 13:21 mysource drwxr-xr-x. 2 root root 4096 4月 3 13:20 mywork drwxr-xr-x. 2 root root 36864 3月 19 11:09 pythoncook -rw-r--r--. 1 root root 276 4月 3 14:26 zhu.py #child.before 保存的就是在根目录下执行 ls 命令的结果
send(self, s) sendline(self, s='') sendcontrol(self, char) 这些方法用来向子程序发送命令,模拟输入命令的行为。与 send() 不同的是 sendline() 会额外输入一个回车符 ,更加适合用来模拟对子程序进行输入命令的操作。当需要模拟发送 “Ctrl+c” 的行为时,还可以使用 sendcontrol() 发送控制字符。
上一篇: python socket多线程和多进程
下一篇: python 文件操作读、写、追加的区别
47848
46404
37291
34738
29321
25977
24923
19957
19549
18033
5798°
6421°
5936°
5965°
7071°
5920°
5951°
6446°
6408°
7787°