社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python自动化Pexpect

生信杂谈 • 6 年前 • 285 次点击  

最近发现做了很多模拟,但是一些常规分析每次都需要进行查阅,套路化计算,我在想为何不能自动化每次模拟完自动执行一下呢?之前写了一个shell脚本的,现在看起来非常不高级,而且时间久了就会忘记,磨刀不误砍柴工,所以最近粗略的学习了Python自动化运维常用的两个模块, Pexpectpsutil,在这里简单介绍一下。

Pexpect简介

Pexpect是一个终端自动交互python模块,十分易于上手

安装

安装可以通过pip或者conda,适用版本为Python2.7或者Python3.3以上

  1. pip install pexpect

简单使用说明

其实使用方法在简书的Pexpect 模块使用说明总结的非常好,这里仅做快速简要介绍

spawn() - 执行程序

  1. # 执行linux命令,返回的为结果

  2. pexpect.spawn(command, args=[], timeout=30,  logfile=None, cwd=None)

参数里面我列了几个觉得很重要的内容,一个是 timeout 表示等待时间, logfile表示写入的日志文件, cwd表示根目录

expect() - 关键字匹配

  1. # 正则匹配输出

  2. expect(pattern, timeout=-1, searchwindowsize=-1, async_=False, **kw)

匹配后会返回值,若匹配的是一个字符串,匹配到了会返回0,若为一个列表,则匹配到了的话,会定位到列表的第几个关键字,从0开始计算

  1. expect_loop(self, searcher, timeout=-1, searchwindowsize=-1)

用于从标准输入中获取内容,loop这个词代表它会进入一个循环,必须要从标准输入中获取到关键字才会往下继续执行。

send() -发送关键字

其实相当于Shell中 echo-e,我感觉

  1. # 发送

  2. send()

  3. # 发送加空格

  4. sendlines()

  5. # 发送但没有返回值

  6. write()

  7. # 发送包含字符串的列表

  8. # 类似于 write() 命令,只不过接受的是一个字符串列表,

  9. # writelines() 会向子程序一条一条的发送列表中的元素,

  10. #但是不会自动在每个元素的最后加上回车换行符。

  11. writelines()

  12. # 发送特殊字符,例如Ctrl-G

  13. sendcontrol('g')

read() - 返回关键字

感觉应用不多

  1. # 返回剩下的所有内容

  2. read()

  3. # 返回一行输出

  4. readline()

  5. # 返回列表模式的所有输出

  6. readlines()

控制子程序

一些对于执行程序的操作

  1. # 杀死子程序

  2. kill()

  3. # 查看是否存活

  4. isalive()

  5. # 等待直到子程序退出

  6. wait()

  7. # 关闭子程序

  8. close()

  9. # 子程序进程

  10. pid

运行功能

  1. # 运行linux命令,返回的为结果

  2. pexpect.run( command, args=[], timeout=30,  logfile=None, cwd=None)

可能大家对 run()spwan()之间的区别很好奇, run()相比 spwan()为等待命令完全完成,然后才会返回结果

更多原创精彩视频敬请关注**生信杂谈:**



今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/KEojj4HOA1
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/9146
 
285 次点击