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