导航:首页 > 编程语言 > pythonexpect模块

pythonexpect模块

发布时间:2022-06-10 19:07:25

python 脚本中pexpect模块问题~

亲不清楚你为什么匹配两次y/n

我给你个例子说明expect的用法
例如我ssh连接一台服务器

连接之后会有提示,此时我们可以使用expect

ssh.expect('continueconnecting(yes/no)?')

之前的字符应该自动正则了
expect之后我们就可以根据提示输入要输入的信息
ssh.sendline('yes ')

哦shit我发现个问题你是不是应该试试crt.sendline('y ')

❷ python中的Pexpect模块使用时,child.expect('参数')中的参数到底应该填什么内容谢谢!

当你发布一条命令后,系统会给你一个反馈。

参数:就是你所期望的反馈!
比如说,当你发布一条命令后,期望系统提示 "Password" 让你输入密码,那语句就是
child.expect ('Password:')

参数也可以用正则表达式,注意是最小匹配模式。

❸ python pexpect 为什么无法接收过多的输出信息

ssh-keygen -f id_rsa -t rsa -N '' 直接执行这个bash命令就可以了,不用python脚本
当你发布一条命令后,系统会给你一个反溃 参数:就是你所期望的反馈! 比如说,当你发布一条命令后,期望系统提示 "Password" 让你输入密码,那语句就是 child.expect ('Password:') 参数也可以用正则表达式,注意是最小匹配模式。

❹ 怎样用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 python有什么好处

child.expect(r']\$')
child.sendline("echo hallo >> /home/benny/2.txt")
child.expect(r']\$')
child.sendline("echo abc >> /home/benny/3.txt")

#############################################

ssh连接上后,匹配到 "]$"时 "echo hallo >> /home/benny/2.txt",匹配到 "]$" 时,"echo abc >> /home/benny/3.txt"

为什么第二个没有写入呢,不知道是没有匹配到没有执行,还是其他原因

对于pexpect帮助中的这段也不明白,

Please note, however, that buffering can affect this behavior, since
input arrives in unpredictable chunks. For example::

# the input is 'foobar'
index = p.expect (['foobar', 'foo'])
# returns 0 ('foobar') if all input is available at once,
# but returs 1 ('foo') if parts of the final 'bar' arrive late

❻ aexpect属于python哪个包

听说过pexpect

❼ python的公共变量如何管理

全局变量管理模块
首先定义一个全局变量管理模块

# common/gloabalvar.py
# -*- coding:utf-8 -*-
"""
global var mole
"""

def _init():
global _global_dict
_global_dict = {}

def set_value(name, value):
"""定义一个全局变量"""
_global_dict[name] = value

def get_value(name, defValue=None):
"""获取一个全局变量值,不能存在则返回默认值"""
try:
return _global_dict[name]
except KeyError:
return defValue
二、初始化及定义(设置)全局变量
# main.py

import app.common.globalvar as globalvar

if __name__ == "__main__":
# init global var
globalvar._init()
globalvar.set_value('itsm_deadline', SettingConfig.ITSM_DAILY_DEADLINE)
globalvar.set_value('email_subject', SettingConfig.EMAIL_SUBJECT)
globalvar.set_value('email_recipients', SettingConfig.EMAIL_RECIPIENTS)
globalvar.set_value('auto_submit_status', SettingConfig.AUTO_SUBMIT_STATUS)
1
2
3
4
5
6
7
8
9
10
11
三、获取全局变量
# business.py
import app.common.globalvar as globalvar

status = globalvar.get_value('auto_submit_status')
附加:API管理全局变量,都是基于上述三点完成
对于flask-restful的web应用则可以通过API接口查看全局变量的值以及通过API接口设置和管理它们

# app/api/v1/test/test.py
from flask_restplus import Resource
import app.common.globalvar as globalvar
from .marshal_model import admin_api_ns as api

@api.route('/')
class GlobalVar(Resource):
"""全局变量管理API"""
@api.doc('Get all the global var')
@api.response(HTTP_GET_SUCCESS, 'query success')
def get(self):
"""查询所有的全局变量"""
glist = globalvar._global_dict
return glist, HTTP_GET_SUCCESS

@api.route('/auto')
class AutoSubmit(Resource):
"""查看及修改自动状态的API"""
@api.doc('check auto submit status')
@api.marshal_with(set_autosubmit)
@api.response(HTTP_GET_SUCCESS, 'query success')
def get(self):
"""测试查看自动状态开关状态"""
status = globalvar.get_value('auto_submit_status')
# status = query_autojob_status()
return {'status': status}, HTTP_GET_SUCCESS

@login_required
@admin_required
@api.doc('set auto submit the planlist everyday')
@api.expect(set_autosubmit)
def post(self):
"""设置每天定时自动开关"""
data = request.json
status = data.get('status')
globalvar.set_value('auto_submit_status', status)
# resp, returncode = update_autojob_status(status)
return {'message': 'success'}, HTTP_POST_SUCCESS

❽ python pexpect 模块

Pexpect 是一个用来启动子程序并对其进行自动控制的 Python 模块,它可以用来和像 ssh、ftp、passwd、telnet 等命令行程序进行自动交互。
下面这个实例功能是:以ssh远程登录,登录成功后执行命令‘ls -lh’
pexpect之spawn类
当然,ssh登录还可以使用pexpect的run函数实现:
#events是一个字典,定义了expect和sendline的对应关系pexpect.run('ssh [email protected]',events={'password:','123456'})

针对ssh远程登录,pexpect又派生出了pxssh类,在ssh会话操作上再做一层封装
其常用方法是:
login() #建立ssh连接
logout()#断开ssh连接
prompt()#等待系统提示符,用于等待命令执行结束

❾ 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() #等待系统提示符,用于等待命令执行结束

❿ 如何Python3.4使用pexpect来实现SSH登陆

Pexpect 是 Don Libes 的 Expect 语言的一个 Python 实现,是一个用来启动子程序,并使用正则表达式对程序输出做出特定响应,以此实现与其自动交互的 Python 模块。 Pexpect 的使用范围很广,可以用来实现与 ssh、ftp 、telnet 等程序的自动交互;可以用来自动复制软件安装包并在不同机器自动安装;还可以用来实现软件测试中与命令行交互的自动化。

在shell里面用过pexpect的人,相信都会很熟悉这种工具,pexpect是expect的python的一个实现,利用python来操作某些交互式的自动化任务是非常方便的。

阅读全文

与pythonexpect模块相关的资料

热点内容
stc8单片机串口中断 浏览:954
信号分析pdf 浏览:927
暴力删除命令 浏览:803
qt如何编译加快速度 浏览:903
php添加数据sql语句 浏览:717
免费的小说app有什么 浏览:405
螺杆压缩机进气阀动画 浏览:651
两台服务器如何做负载均衡 浏览:227
程序员的工资是涨的吗 浏览:813
视频存储服务器可以干什么 浏览:463
创建文件夹安装失败怎么回事 浏览:832
程序员高考隔了几年 浏览:822
云服务器是哪一层 浏览:22
jit编译器的jit什么意思 浏览:330
我想清理手机中空白文件夹 浏览:976
电脑e盘文件夹删不掉怎么办 浏览:607
外圆凹圆弧编程 浏览:461
html5编程题 浏览:840
干燥机制冷压缩机一开就跳动 浏览:389
吉林压缩空气流量监测 浏览:618