python安装pexpect
Ⅰ python , pexpect 远程控制
既然bash提示"匹配错误,应该是命令行相关参数的quoting有问题,仔细检查这两行
>>> sql = "mysql -D logappconfig -e \\\"UPDATE app.Settings SET appAMPM='AM'\\\""
>>> ssh = pexpect.spawn('ssh %s@%s \"%s\"' % ('toor', ip, cmd))
我没有运行环境,无法调试。只能告诉你应该是这里有问题。
Ⅱ 如何升级到python3版本并且安装pip3及ipython3
如何升级到python3版本并且安装pip3及ipython3
确保你的系统上已经安装好了 pip3. 如果没有,请使用命令:
sudo dnf install python3-pip
进行安装。
安装好了之后在命令行输入pip3会显示它的帮助信息。
开始安装tornado。首先,按照常理,使用命令:
sudo pip3 install tornado==4.3
如果4.3已经不是最新版本,请自行替换为最新版本。
经过小编尝试,发现容易出现 timeout 错误。
Ⅲ python 的pexpect模块怎么安装
当然,ssh登录还可以使用pexpect的run函数实现:
#events是一个字典,定义了expect和sendline的对应关系
pexpect.run('ssh [email protected]',events={'password:','123456'})
针对ssh远程登录,pexpect又派生出了pxssh类,在ssh会话操作上再做一层封装
其常用方法是:
login() #建立ssh连接
logout() #断开ssh连接
prompt() #等待系统提示符,用于等待命令执行结束
Ⅳ Python 在windows中如何安装pexpect呢python使用什么版本,pexpec
可以使用winpexpect
Ⅳ linux 安装python拓展包pexpect
哦。因为你是egg格式。所以需要安装一个setup tool,也有可能是ezsetup。这个在它的安装里有一个详细提示。
distuils.core是python的setup.py里引用的一个安装包。通常python安装分发包都要使用这个库。
从现在这个情况看。你的机器上的python似乎不是一个完整版本。
我以前在suse的linux上发现过这种问题。
你可以单独安装一个自己的python版本。这样linux原有的python与你安装的python相互不影响都可以使用。
Ⅵ 怎样用python实现scp
scp 功能很强大,但需要人工输入 password, 当然可以通过把 公钥保存在远程主机的 ~/.ssh 目录中,而后就不用输入password,但这需要配置.
用 sshpass 可能在命令输入 password, 但 需要用 “sudo apt-get install sshpass” 安装
如果不想用上面两种方法,可以用 expect 编写脚本可以帮助我们自动交互
虽然 Python 也提供 pexpect 模块,但既然 expect 很简单,为何不直接用 os.system() 去执行呢?
下面是我编写的类,实现了远程复制
[html] view plain
class RemoteShell:
def __init__(self, host, user, pwd):
self.host = host
self.user = user
self.pwd = pwd
def put(self, local_path, remote_path):
scp_put = '''
spawn scp %s %s@%s:%s
expect "(yes/no)?" {
send "yes\r"
expect "password:"
send "%s\r"
} "password:" {send "%s\r"}
expect eof
exit'''
os.system("echo '%s' > scp_put.cmd" % (scp_put % (os.path.expanser(local_path), self.user, self.host, remote_path, self.pwd, self.pwd)))
os.system('expect scp_put.cmd')
os.system('rm scp_put.cmd')
但发现每次文件都没有复制完,我想看expect 究竟做了什么事情,还好 expect 提供 -d 参数给出更多的信息。
最后发现是被复制文件太大,expect 超时退出了
在脚本前加入 “set timeout -1" 就OK了
[html] view plain
scp_put = '''
set timeout -1
spawn scp %s %s@%s:%s
expect "(yes/no)?" {
send "yes\r"
expect "password:"
send "%s\r"
} "password:" {send "%s\r"}
expect eof
exit'''
Ⅶ pexpect 跨平台(WIN、LINUX)简明教程
详细的内容可以参考下面的参考文档,下面的内容主要是为网络设备运维人员使用的pexpect 跨平台简明教程。
Expect 程序主要用于人机对话的模拟,就是那种系统提问,人来回答 yes/no ,或者账号登录输入用户名和密码等等的情况。
pexpect是 Don Libes 的 Expect 语言的一个 Python 实现,是一个用来启动子程序,并使用正则表达式对程序输出做出特定响应,以此实现与其自动交互的 Python 模块。它可以用来实现与ssh, ftp, telnet等程序的自动交互。
send命令后执行结果内容保存在buffer中,这时child.expect('keyword')后,child.before即为“keyword”之前的字符串,child.after即为匹配的”keyword”字符串。
command的执行结果都保存在一个buffer中,每次执行expect时都从buffer中开始检查匹配的pattern,如果找到了匹配的pattern,则所有在匹配处之前的内容都从buffer中清除。
(这边没有看明白也没有关系,可以看后面的实践篇例子)
通常维护人员有的偏向于用WIN系统,有的偏向于LINUX系统。所以前期团队希望形成一个统一框架的时候就出现了一个难题。框架如何适用于不同的系统。
LInux系统pexpect包,win系统前期尝试使用winpexpect,但是程序改动很大,并没有调试成功。
如何在WIN系统使用python的pexpect包很难找到相关资料,某乎上都是类似的疑问没有解答。
团队成员增加后,终于有了新的思路 , 团结就是力量 。
通过这个模块进行不同系统的适配。
将plink.exe装在python的文件夹在python的安装目录下,win系统可以同样使用pexpect模块
参考信息1:Pexpect 官方文档 New in version 4.0: Windows support。Pexpect can be used on Windows to wait for a pattern to be proced by a child process, using [ pexpect.popen_spawn.PopenSpawn ]
参考信息2:PuTTY是一个Telnet、SSH、rlogin、纯TCP以及串行接口连接软件。plink是可以独立使用的exe实现形式,可以让我们直接在命令行制定好命令,然后执行,完成后自动关闭session。ssh是一个安全通道协议。plink是这个通道协议的一个实现 [图片上传中...(-572001-1587612890428-0)]
从官方文档来看,
sendline() 和 send() 唯一的区别就是在发送的字符串后面加上了回车换行符,这也使它们用在了不同的地方:
只需要发送字符就可以的话用send()
如果发送字符后还要回车的话,就用 sendline()
但是在调测过程中,WIN系统下命令输入后,child.before始终得不到预想中的结果。
经过逐步排查,发现在WIN系统下只能使用send() ,如果使用sendline() ,第一次交互没有问题,后续交互就开始问题。
WIN系统下child.before输出为b'byte型,做判断时要转为str型。具体可以参考最后面一篇讲编码类型的文章,讲的很详细。
例子1
send Username后,child.before一直到'Tac_Userna',child.after为‘me:’,child.buffer为空。
expect关键字assword:后,child.before回显一直到keyword之前,child.after为keyword,child.buffer为空。
例子2
下发command命令,child.before维持原来的不变,expect到keyword以后,child.before变为下发command命令后的设备回显。
参考文档
官方文档
探索Pexpect
Pexpect示例及使用Tips
Python Pexpect模块讲解
Pexpect模块使用说明
windows下使用plink实现全自动登陆ssh
Python3_字符编码
Ⅷ 如何Python3.4使用pexpect来实现SSH登陆
Pexpect 是 Don Libes 的 Expect 语言的一个 Python
实现,是一个用来启动子程序,并使用正则表达式对程序输出做出特定响应,以此实现与其自动交互的 Python 模块。 Pexpect
的使用范围很广,可以用来实现与 ssh、ftp 、telnet
等程序的自动交互;可以用来自动复制软件安装包并在不同机器自动安装;还可以用来实现软件测试中与命令行交互的自动化。
在shell里面用过pexpect的人,相信都会很熟悉这种工具,pexpect是expect的python的一个实现,利用python来操作某些交互式的自动化任务是非常方便的。
如何在linux下安装?
1,使用wget https://pypi.python.org/pypi?:action=show_md5&digest= 下载
2,使用tar -zxvf pexpect-3.3.tar.gz解压
3,使用python setup.py install进行安装
ok,上面的步骤,执行完成之后,我们就可以来写个demo测试一下了,另外注意兼容问题,散仙的python是3.4,所以要下载支持python3.4的pexpect,如果你的python版本是2.x那么就要下载2.x的pexpect来使用。
下面是散仙模拟SSH登陆一台机器并打印磁盘情况,然后退出的例子:
#!/usr/local/python3.4/bin/python3.4
import pexpect
ip="192.168.46.22"
name="root"
pwd="abc"
#发送命令执行交互
child=pexpect.spawn('ssh %s@%s' % ("root",ip) )
#
child.expect ('password:')
child.sendline(pwd)
child.expect('$')
child.sendline('df -h')
#发送命令
child.sendline("exit")
child.interact()
#关闭pexpect
child.close()
执行结果如下:
Last login: Wed Oct 22 18:35:08 2014 from 192.168.46.31
exit[root@ganglia ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_ganglia-lv_root 30G 3.6G 25G 13% /
tmpfs 495M 0 495M 0% /dev/shm
/dev/sda1 485M 32M 428M 7% /boot
[root@ganglia ~]# exit
logout
Connection to 192.168.46.22 closed.
[root@master 2012]#
本文只是一个简单的例子,可能觉得没有必要使用python来完成,但当系统管理规模一旦大起来的话,使用python来自动化管理是非常轻松的一件事。
Ⅸ python 脚本中pexpect模块问题~
亲不清楚你为什么匹配两次y/n
我给你个例子说明expect的用法
例如我ssh连接一台服务器
连接之后会有提示,此时我们可以使用expect
ssh.expect('continueconnecting(yes/no)?')
之前的字符应该自动正则了
expect之后我们就可以根据提示输入要输入的信息
ssh.sendline('yes
')
哦shit我发现个问题你是不是应该试试crt.sendline('y
')