網站首頁 編程語言 正文
使用工具:
- pexpect庫
pexpect可以理解為Linux下expect(不知道的可以百度下linux expect)的python封裝。
通過pexpect可以實現對ssh、ftp、passwd、telnet等命令進行自動交互,而無需人工干涉來達到自動化的目的。
比如我們可以模擬一個FTP登錄時的所有交互,包括輸入主機地址、用戶名、密碼,還有對文件上傳下載操作等等,若出現異常,我們也可以進行自動化處理。
ftp登錄腳本
實現登錄,文件上傳下載
import pexpect
class ?FTP(object):
? ? def __init__(self,ip:str,user,passwd) : #初始化這些函數
? ? ? ? self.ip = ip
? ? ? ? self.user=user
? ? ? ? self.passwd = passwd
? ? ? ? self.child = None
? ? def ftp_open(self):
? ? ? ? self.child = pexpect.spawnu(f'10.0.0.1')
? ? ? ? # print({self.ip})
? ? ? ? self.child.expect(f'username')
? ? ? ? self.child.sendline(f'username')
? ? ? ? self.child.expect('(?i)password')
? ? ? ? self.child.sendline(f'password')
? ? ? ? self.child.expect('ftp> ',timeout=60)
? ? def ftp_up_down(self): ? ? ? ?
? ? ? ? self.child.sendline('put /tmp/test.dat /pub/test002.dat')
? ? ? ? self.child.expect('ftp> ',timeout=60) ? ? ??
? ? ? ? self.child.sendline('get /pub/test002.dat /tmp/test003.dat')
? ? ? ? self.child.expect('ftp> ',timeout=60)
? ? def ftp_up_down_port(self): ??
? ? ? ? self.child.sendline('passive')
? ? ? ? self.child.expect('ftp> ',timeout=60) ? ? ??
? ? ? ? self.child.sendline('put /tmp/test.dat pub/test002.dat')
? ? ? ? self.child.expect('ftp> ',timeout=60) ? ?
? ? ? ? self.child.sendline('get /pub/test002.dat /tmp/test003.dat')
? ? ? ? self.child.expect('ftp> ',timeout=60)
? ? def ftp_close(self):
? ? ? ? self.child.sendline('bye')
該方法實現封裝的好處:
1.將登錄上傳下載退出分為不同方法,方便調用
2.傳參靈活,可以任意增加或修改函數
pexpect組件簡介
1. spawn類
spanw是pexpect的主要接口,功能就是啟動和控制子應用程序,spawn()中可以是系統中的命令,但是不會解析shell命令中的元字符,包括重定向“>”,管道符“|”或者通配符“*”,但是我們可以將含有這三個特殊元字符的命令作為/bin/bash的參數進行調用,例如:
she = pexpect.spawn(‘/bin/bash –c “cat /etc/passwd | grep root > log.txt”')
she.expect(pexpect.EOF)
spawn支持使用python列表來代替參數項,比如上述命令可變為:
command = ‘cat /etc/passwd | grep root > log.txt'
she = pexpect.spawn(‘/bin/bash',[‘-c',command])
she.expect(pexpect.EOF)
(1)expect方法:expect定義了子程序輸出的匹配規則。也可使用列表進行匹配,返回值是一個下標值,如果列表中有多個元素被匹配,則返回的是最先出現的字符的下標值。
(2)read方法:向子程序發送響應命令,可以理解為代替了我們的鍵盤輸入。
send(self,s) 發送命令,不回車
sendline(self,s='') 發送命令,回車
sendcontrol(self,char) 發送控制字符test.sendcontrol(‘c')等價于“ctrl+c”
sendeof() 發送eof
2. run函數
run是使用pexpect進行封裝的調用外部命令的函數,類似于os.system()或os.popen()方法,不同的是,使用run可以同時獲得命令的輸出結果及其命令的退出狀態。
pexpect.run('ssh xxx@x.x.x.x',events={'password:':'xxx'})
events是個字典
原文鏈接:https://blog.csdn.net/qq_45175681/article/details/124165543
相關推薦
- 2022-12-29 C++?Boost?Serialization庫超詳細獎金額_C 語言
- 2022-07-16 TritonObjDet新增要素的方法
- 2024-03-08 SpringBoot開發中VO、DTO的作用,以及使用場景
- 2022-11-30 Cenots7?離線安裝部署PostgreSQL?的詳細過程_PostgreSQL
- 2022-09-22 string類的模擬實現
- 2022-04-20 基于PyQT5制作一個桌面摸魚工具_python
- 2023-02-09 Flask如何獲取用戶的ip,查詢用戶的登錄次數,并且封ip_python
- 2022-04-22 npm WARN postcss-modules@4.2.2 requires a peer of
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支