Python使用Pexpect库实现自动化与终端交互的任务
Pexpect 是一个 Python 库,用于自动化与终端交互的任务。它提供了一种简单的方式来编写脚本,以便与终端程序进行交互。以下是 Pexpect 的一些常用参数和方法的更详细说明:
常用参数:
command:这是你想要启动的命令行程序的路径。例如,如果你想要启动一个名为 ‘ftp’ 的程序,你可以传递 ‘/usr/bin/ftp’ 作为这个参数的值。
timeout:这是你愿意等待命令行程序输出的最大时间(以秒为单位)。如果在这个时间内,你没有从命令行程序收到任何输出,Pexpect 将引发一个超时异常。
maxread:这是你想要从命令行程序中读取的最大字节数。默认值是 2000,即最多读取 2000 个字节。
searchwindowsize:这是你想要搜索的字符串或正则表达式的窗口大小。默认值是 25,这意味着 Pexpect 将只检查最近的 25 个字符或行来寻找匹配项。
logfile:这是一个文件对象,Pexpect 将把所有标准输出和标准错误输出重定向到这个文件。如果你不提供这个参数,输出将仍然显示在控制台上。
常用方法:
spawn():
这是启动一个新的命令行程序的方法。你可以传递一个命令行程序的路径作为参数。例如,ftp = pexpect.spawn(‘/usr/bin/ftp’) 将启动 FTP 客户端。
expect():
这是等待命令行程序输出特定字符串或正则表达式的方法。你可以传递一个字符串或正则表达式作为参数,然后 Pexpect 将等待直到程序输出这个字符串或正则表达式。例如,ftp.expect('ftp> ') 将等待直到 FTP 客户端提示你输入命令。
sendline():
这是向命令行程序发送一行命令的方法。你可以传递一个字符串作为参数,然后 Pexpect 将把这个字符串发送给程序。例如,ftp.sendline(‘ls’) 将发送 ‘ls’ 命令到 FTP 客户端,然后等待程序输出结果。
close():
这是关闭与命令行程序的连接的方法。当你完成与程序的交互后,你应该调用这个方法来释放资源。例如,ftp.close() 将关闭与 FTP 客户端的连接。
interact():
这是启动交互模式的方法。在交互模式下,你可以手动控制与命令行程序的交互。例如,你可以使用键盘输入命令,然后使用 sendline() 方法将它们发送到程序。
Pexpect可以通过以下方式进行安装:
pip安装:在命令行输入pip3 install pexpect即可。
easy_install安装:在命令行输入easy_install pexpect即可。
源码安装:下载Pexpect的源代码包,解压后进入目录,然后在命令行输入python setup.py install即可。
#下载tcl源码包: wget http://prdownloads.sourceforge.net/tcl/tcl8.4.20-src.tar.gz。 #解压并编译安装tcl: tar zxvf tcl8.4.20-src.tar.gz,cd tcl8.4.20/unix/,./configure --prefix=/usr/tcl --enable-shared,make,make install。 #下载expect源码包:wget http://sourceforge.net/projects/expect/files/Expect/5.45/expect5.45.tar.gz。 #解压并编译安装expect: tar zxvf expect5.45.tar.gz, cd expect5.45, ./configure --prefix=/usr/expect --with-tcl=/usr/tcl/lib --with-tclinclude=../tcl8.4.20/generic/, make, make install #安装完成之后做一个软连接: ln -s /usr/tcl/bin/expect /usr/expect/bin/expect #加入环境变量并测试: echo 'export PATH=$PATH:/usr/expect/bin' >> /etc/profile
示例:
#!/usr/bin/env python import pexpect devices = {'iosv-1': {'prompt': 'lax-edg-r1#', 'ip': '192.168.2.51'}, 'iosv-2': {'prompt': 'lax-edg-r2#', 'ip': '192.168.2.52'}} username = 'cisco' password = 'cisco' for device in devices.keys(): device_prompt = devices[device]['prompt'] child = pexpect.spawn('telnet ' + devices[device]['ip']) child.expect('Username:') child.sendline(username) child.expect('Password:') child.sendline(password) child.expect(device_prompt) child.sendline('show version | i V') child.expect(device_prompt) print(child.before) child.sendline('exit')
ssh:
from pexpect import pxssh >>> child = pxssh.pxssh() >>> child.login('192.168.2.51', 'cisco', 'cisco', auto_prompt_reset=False) True >>> child.sendline('show version | i V') 19 >>> child.expect('lax-edg-r1#') 0 >>> child.before b'show version | i V\r\nCisco IOS Software, IOSv Software (VIOSADVENTERPRISEK9-M), Version 15.8(3)M2, RELEASE SOFTWARE (fc2)\r\nProcessor board ID 98U40DKV403INHIULHYHB\r\n' >>> child.logout()
ftp:
import pexpect # 启动 FTP 子程序 ftp = pexpect.spawn('ftp') # 期望看到 'ftp>' 提示符 ftp.expect('ftp> ') # 发送用户名和密码(假设为 'user' 和 'pass') ftp.sendline('user') ftp.sendline('pass') # 期望登录成功 ftp.expect('230 Login successful') # 发送命令 'dir' 查看目录列表 ftp.sendline('dir') ftp.expect('Directory listing') # 关闭 FTP 子程序 ftp.sendline('bye')
log:
import pexpect import time # 创建日志文件并设置 Pexpect 记录日志 log_file = open('ftp_log.txt', 'w') ftp = pexpect.spawn('ftp', logfile=log_file) time.sleep(2) # 让子程序运行一段时间以便记录日志 log_file.close() # 关闭日志文件
telnet:
import pexpect # 启动 Telnet 子程序 telnet = pexpect.spawn('telnet', ['hostname', 'port']) # 期望看到 Telnet 提示符 telnet.expect('login: ') # 发送用户名和密码(假设为 'user' 和 'pass') telnet.sendline('user') telnet.expect('Password:') telnet.sendline('pass') # 期望登录成功并看到提示符(例如 '#' 或 '$') telnet.expect('#') # 使用 interact 方法进行交互(注意:interact 方法会阻塞程序执行直到子程序关闭) telnet.interact()
到此这篇关于Python使用Pexpect库实现自动化与终端交互的任务的文章就介绍到这了,更多相关Python Pexpect内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Python中Tkinter Scrollbar滚动条(窗口滑动条)
本文主要介绍了Python中Tkinter Scrollbar滚动条(窗口滑动条),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2023-03-03Python打包文件执行报错:ModuleNotFoundError: No module 
这篇文章给大家介绍了Python打包文件执行报错:ModuleNotFoundError: No module named ‘pymssql‘的解决方法,如果有遇到相同问题的朋友可以参考阅读一下本文2023-10-10python爬虫开发之Request模块从安装到详细使用方法与实例全解
这篇文章主要介绍了python爬虫开发之Request模块从安装到详细使用方法与实例全解,需要的朋友可以参考下2020-03-03新版pycharm配置运行参数的教程/pycharm2023
这篇文章主要介绍了新版pycharm配置运行参数的教程/pycharm2023,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-01-01
最新评论