您的位置:首页 > 其它

我的工具集1——集中删除系统中的消息队列

2016-06-05 09:46 387 查看

我的工具集1——集中删除系统中的消息队列

最近看到一个说法——不做任何超过90秒的工作。这真是偷懒达到一定境界了。不过其实很有道理,程序员嘛,就是要做些东西可以让大家偷懒,解放生产力。而第一个享用着当然应该是自己了。之前也会偶尔写些脚本帮助处理重复性的工作,不过没有什么记录,今天开始,所有写过的小工具要做个记录了。

需求

最近在做消息队列的开发,由于代码还在测试过程中,会在系统中产生好多消息队列。比如这样

zhanghaoran@wlan-ubuntu:~/work/mytoolkit/mytoolkit$ ipcs -q

------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages
0x00000001 163840     zhanghaora 660        0            0
0x0000604c 589825     zhanghaora 660        0            0
0x00005ec3 229378     zhanghaora 660        8            1
0x00005ee1 262147     zhanghaora 660        8            1
0x00005ee8 294916     zhanghaora 660        8            1
0x00005f1c 327685     zhanghaora 660        0            0
0x00005f47 360454     zhanghaora 660        0            0
0x00005f87 393223     zhanghaora 660        0            0
0x00005f88 425992     zhanghaora 660        0            0
0x00005fa9 458761     zhanghaora 660        0            0
0x00005fd0 491530     zhanghaora 660        0            0
0x00005fed 524299     zhanghaora 660        0            0
0x0000601b 557068     zhanghaora 660        0            0
0x00006068 622605     zhanghaora 660        0            0
0x00006084 655374     zhanghaora 660        0            0
0x000060a7 688143     zhanghaora 660        0            0
0x000060c3 720912     zhanghaora 660        0            0
0x000060c5 753681     zhanghaora 660        0            0
0x00006103 786450     zhanghaora 660        0            0
0x0000611f 819219     zhanghaora 660        0            0
0x0000613d 851988     zhanghaora 660        0            0
0x0000615a 884757     zhanghaora 660        0            0
0x0000617e 917526     zhanghaora 660        0            0
0x0000619b 950295     zhanghaora 660        0            0
0x000061bb 983064     zhanghaora 660        0            0
0x000061e2 1015833    zhanghaora 660        0            0
0x00006205 1048602    zhanghaora 660        0            0
0x00006222 1081371    zhanghaora 660        0            0
0x00006241 1114140    zhanghaora 660        0            0
0x00006274 1146909    zhanghaora 660        0            0
0x00006291 1179678    zhanghaora 660        0            0
0x000062d1 1212447    zhanghaora 660        0            0
0x00006442 1245216    zhanghaora 660        0            0
0x00000000 1277985    zhanghaora 660        3            1
0x00006478 1310754    zhanghaora 660        8            1
0x00000000 1343523    zhanghaora 660        3            1
0x00006495 1376292    zhanghaora 660        8            1
0x00000000 1409061    zhanghaora 660        3            1
0x000064b4 1441830    zhanghaora 660        8            1
0x00000000 1474599    zhanghaora 660        3            1
0x000064d4 1507368    zhanghaora 660        8            1
0x00000000 1540137    zhanghaora 660        3            1
0x000064ec 1572906    zhanghaora 660        8            1
0x00000000 1605675    zhanghaora 660        3            1
0x00006522 1638444    zhanghaora 660        0            0
0x00000000 1671213    zhanghaora 660        3            1
0x0000653d 1703982    zhanghaora 660        8            1
0x00000000 1736751    zhanghaora 660        3            1


一条一条手动删除并非上策,那么就要做个小工具集中删除了。

解决方案

当然可以使用shell脚本来解决,不过最近学习Python总是没机会使用,就拿这个练手了。先上代码:

#!/usr/bin/python3
import os
import re

data = os.popen('ipcs -q').read()

lines = re.split('\n', data);

for line in lines:
elements = re.split(' ', line)
if len(elements) >= 2:
if elements[1].isdigit():
os.system('ipcrm -q' + elements[1])


要想删除一个消息队列,使用的方法是ipcrm -q + 消息队列号,也就是要提取出ipcs -q中每行的第二个字段。这样我们需要将ipcs -q的执行结果放到一个变量中方便处理。os.system()不能获得shell的执行结果,但是可以借助os.popen()。这个函数原型为:

os.popen(cmd, mode=’r’, buffering=-1)


它打开一个连接cmd的管道。返回值是这个打开的管道的文件描述符,可以进行读或写操作。这样我们就可以将’ipcs -q’命令的结果读进data变量了。

之后要将变量按行处理,可以通过re.split(),这个函数可以将一个字符串按照指定的模式进行分割,返回作为分割结果的list。

之后遍历这个list,观察’ipcs -q’的结果,我们需要的是第二列为数字的行,所以进行 进一步过滤。最后用得到的ipc号执行’ipcrm -q’即可。

本文代码托管于:

https://github.com/haoranzeus/mytoolkit
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  脚本