安装

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
--------------------- 

收藏 打印