Python——检测Popen返回的stdOutMsg中是否是否包含指定字符,并提取指定位置的信息
问题背景:
Python 中经常会需要通过subprocess.PoPen函数下发Shell Command,与操作系统进行交互。一些情况下,还需要分析shell command的返回值,提取有用信息。
1、首先给出subporess.Popen下发shell command的接口示例:
def FilterPrintable(input_string=""):
printable = set(string.printable)
if isinstance(input_string, bytes):
try:
input_string = input_string.decode("utf-8", errors="replace")
except Exception as ex:
raise Exception(ex)
obj_filter = filter(lambda x: x in printable, input_string)
output_string = ''.join(c for c in obj_filter)
return output_string
def SendShellCommand(self, shellcmd="", timeOut=0):
try:
p = subprocess.Popen(shellcmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True, universal_newlines=True)
if timeOut:
(stdOut, stdErr) = p.communicate(timeOut)
else:
(stdOut, stdErr) = p.communicate()
stdOutMsg = self.FilterPrintable(stdOut)
stdErrMsg = self.FilterPrintable(stdErr)
except subprocess.TimeoutExpired:
raise subprocess.TimeoutExpired
except Exception as ex:
raise Exception(ex)
if p.stdout:
p.stdout.close()
if p.stdErr:
p.stdErr.close()
try:
p.kill()
except OSError:
pass
return p.returncode, stdOutMsg, stdErrMsg
2、举例说明如何解决背景中所述 的问题:
def CheckFioProcess():
cmdStr = "ps -elf | grep fio"
returncode, stdOutMsg, stdErrMsg = self.SendShellCommand(cmdStr)
fioPidList = []
stdOutMsgList = stdoutMsg.spilt("\n")
for stdMsg in stdOutMsgList:
if stdMsg.find("fio") != -1:
index1 = stdMsg.find("root")
subStdoutMsg = stdMsg[index1+3:]
fioPid = int(re.findall("\d+", subStdoutMsg))[0])
fioPidList .append(fioPid)
else:
continue
return fioPidList
Python——检测Popen返回的stdOutMsg中是否是否包含指定字符,并提取指定位置的信息的更多相关文章
- sql-将字符串按指定字符分割插入指定表中
CREATE PROC SPLIT( @STR VARCHAR(MAX), --截取字符串 ), --截取字符 ) --存放表名 ) AS BEGIN ) IF(OBJECT_ID(@TABLE) I ...
- Python初学者笔记(3):输出列表中的奇数/奇数项,字符串中的偶数项,字符串大小写转换
[1]a=[8,13,11,6,26,19,24]1)请输出列表a中的奇数项2)请输出列表a中的奇数 解:1) a=[8,13,11,6,26,19,24] print a[::2] Result:& ...
- 使用python检测一个设备是否ping的通
使用python检测一个设备是否ping的通 一,subprocess以及常用的封装函数 运行python的时候,我们都是在创建并运行一个进程.像Linux进程那样,一个进程可以fork一个子进程,并 ...
- python检测服务器是否ping通
好想在2014结束前再赶出个10篇博文来,~(>_<)~,不写博客真不是一个好兆头,至少说明对学习的欲望和对知识的研究都不是那么积极了,如果说这1天的时间我能赶出几篇精致的博文,你们信不信 ...
- python检测404页面
某些网站为了实现友好的用户交互,提供了一种自定义的错误页面,而不是显示一个大大的404 ,比如CSDN上的404提示页面如下: 这样虽然提高了用户体验,但是在编写对应POC进行检测的时候如果只根据返回 ...
- Python 基础知识(持续更新中)
内置数据类型: 整型 浮点型 字符串 布尔值 空值 None 列表 list 元组 tuple 字典 dict 集合 set ...
- Python分析离散心率信号(中)
Python分析离散心率信号(中) 一些理论和背景 心率信号不仅包含有关心脏的信息,还包含有关呼吸,短期血压调节,体温调节和荷尔蒙血压调节(长期)的信息.也(尽管不总是始终如一)与精神努力相关联,这并 ...
- Python+Selenium进行UI自动化测试项目中,常用的小技巧1:读取excel表,转化成字典(dict)输出
从今天开始我将会把在项目中遇到的问题,以及常用的一些技巧来分享出来,以此来促进自己的学习和提升自己:更加方便我以后的查阅. 现在要说的是:用Python来读取excel表的数据,返回字典(dict), ...
- Android——检测TXT文件中是否含有双字节字符
在读取双字节字符时,主要涉及到编码的选取: public static boolean isRightfulTXT(File f) { // TODO Auto-generated method st ...
- python3.6 + selenium2.53.1 查询数据库并将返回的内容中每一行的内容转换成class对象
环境: win10 python3.6 selenium2.53.1 准备工作:先安装pymysql python2.x链接数据库使用MySQLdb,而python3.x链接数据库使用pymysql ...
随机推荐
- CSS 动画 : 创建 3D 立方体
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- VIte+Vue3 打包在本地 双击 index.html 打开项目
npm i @vitejs/plugin-legacy --save import legacy from '@vitejs/plugin-legacy'; export default define ...
- [转帖]Web技术(四):TLS 握手过程与性能优化(TLS 1.2与TLS 1.3对比)
https://blog.csdn.net/m0_37621078/article/details/106126033?ops_request_misc=%257B%2522request%255Fi ...
- [转帖]Linux的tmpfs和ramfs
tmpfs tmpfs是一种虚拟内存文件系统, 它的存储空间在VM里面,现在大多数操作系统都采用了虚拟内存管理机制, VM(Virtual Memory) 是由Linux内核里面的VM子系统管理. V ...
- [转帖]VCSA6.7证书过期后的处置方法
0x00 环境说明 一台测试的ESXI主机,元旦之后已然发现证书已过期,具体现象:VCenter无法登录,一直提示输入用户名和密码,ESXI主机web页面无法登录.重启VC以后,报故障503错误. / ...
- 物理机和虚拟机上CPU睿频的区别
物理机和虚拟机上CPU睿频的区别 关于睿频 睿频是指当启动一个运行程序后,处理器会自动加速到合适的频率, 而原来的运行速度会提升 10%~20% 以保证程序流畅运行的一种技术. 一般max的睿频不能超 ...
- [转帖]Ubuntu Server安装图形界面
最早接触到的Linux系统是Ubuntu 10.04,当时在自己的一台Win7笔记本电脑上安装的Win/Ubuntu双系统,Ubuntu简洁的操作界面给我留下了深刻的印象. 后来开始做一些服务器开发, ...
- 关于async函数的错误处理
1. 关于async函数的错误处理 有些时候,我们请求的接口可能会报错: 从而导致后面的代码无法去执行: 这样就会造成页面上某些状态出错! 那么怎么样才能 既能捕获到错误 还能让代码往后面执行呢 2. ...
- windows加壳程序WinLicense与Themida
反调试提示 开了Procmon.exe之后启动游戏会弹出这个框,这个是程序加壳之后的反外挂,反调试提示框. WinLicense A monitor program has been found ru ...
- 没有安装vs通过Rider编译Dll
没安装vs怎样生成dll? 比起VS那庞大的体积和编码效率,我还是更喜欢使用Rider(和VS的神级插件Resharper是同一家公司的产品),那么在没有安装VS的电脑上是否可以在命令行下把C#代码生 ...