您的位置:首页 > 编程语言 > Python开发

python pexpect

2016-04-01 10:29 561 查看

安装

https://pypi.python.org/pypi/pexpect

下载pexpect 4.0.1

放到ubuntu中解压

tar -xzvf pexpect 4.0.1.tar.gz

到达相应路径

python ./setup.py install

即可安装

安装时候报了个错

SyntaxError: ('invalid syntax', ('/usr/local/lib/python2.7/dist-packages/pexpect/async.py', 16, 30, '    transport, pw = yield from asyncio.get_event_loop()\\\n'))


查了查没结果

直接进入python环境import pexpect试试

发现有问题

>>> import pexpect
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "pexpect/__init__.py", line 75, in <module>
from .pty_spawn import spawn, spawnu
File "pexpect/pty_spawn.py", line 11, in <module>
import ptyprocess
ImportError: No module named ptyprocess


少了个模块,

https://pypi.python.org/pypi/ptyprocess#downloads

下了个ptyprocess

一样解压,安装,

之后import pexpect没问题,可以用了。

或者用pip安装

安装pip

$ sudo apt-get install python-pip python-dev build-essential
$ sudo pip install --upgrade pip
$ sudo pip install --upgrade virtualenv


然后安装pexpect

sudo pip install pexpect

pexpect and SSH

可以用pexpect来进行ssh访问

先给脚本

import pexpect

def sudo(ssh_cmd, passwd):
message="error"
ret = -1
ssh = pexpect.spawn(ssh_cmd)
try:
i = ssh.expect(['continue connecting (yes/no)?', 'password:'], timeout=5)
ssh.sendline('yes\n')
i = ssh.expect(['password:'],timeout=5)
ssh.sendline(passwd)
#ssh.expect(pexpect.EOF)
#print ssh.before
#print ssh.after
r = ssh.read()
message = r
ret = 0
except pexpect.EOF:
message = ""
ret = 0
except pexpect.TIMEOUT:
message = "timeout"
ret = -2
finally :
ssh.close( )
return ret, message

ssh_cmd="ssh X.X.X.X\n ifconfig"
passwd="XXXX"
ret, message=sudo(ssh_cmd, passwd)
print ret,message


很简单的一个小脚本,通过IP和密码SSH远程登录X.X.X.X机器,查看其网卡配置。

这里

#导入模块
import pexpect
# 为 ssh 命令生成一个 spawn 类的子程序对象.
ssh = pexpect.spawn(ssh_cmd)
#获取输出,为前者则i=0,后者则i=1
i = ssh.expect(['continue connecting (yes/no)?', 'password:'], timeout=5)
#输入
ssh.sendline(passwd)
#获取执行命令的输出
r = ssh.read()


输出为

eth0      BLABLA

lo        BLABLA
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: