python 清理mail spool 下的小脚本

时间:2021-06-21 08:49:59

   最近老是碰到磁盘爆满,一查之下是/var/spool/clientmqueue下面的文件太大了。这是由于计划任务未执行所造成的。目的是定期清理这个文件下面的,如果用shell 脚本是很好写的,基本上几行就能搞定。但是最近在玩python ,所以就想自己用Python写一个。

   我自己写了一个脚本,drop_clientmqueue.py:

#!/usr/bin/python

#-*-encoding:utf-8 -*-

import os,subprocess,re

p = subprocess.Popen('cd /var/spool/clientmqueue;du -sh *',shell=True,stdout=subprocess.PIPE)

out=p.communicate()[0]

patten = re.compile('[\n\t]+')

str = re.sub(patten,',',out)

end = str.split(',')[:-1][::2]

local = str.split(',')[:-1]

print local

for i in local:

   # print i,i[-1]

    if i[-1] == 'G':

        if float(i[0:-1]) > 20:

            cmd = 'cd /var/spool/clientmqueue;ls | xargs rm -f'

            print cmd

            os.system(cmd)

仔细看一下这个脚本,其实没什么大的东西,原理就调用系统命令du -sh  找到每个文件的大小,然后根据文件大小,进行删除。删除的时候调用的命令就是:cd /var/spool/clientmqueue;ls | xargs rm -f


还有一个脚本:clear_mail.py

#!/usr/bin/python

#-*-encoding:utf-8 -*-

import os,subprocess,re

p = subprocess.Popen('du -sh *',shell=True,stdout=subprocess.PIPE)

out=p.communicate()[0]

patten = re.compile('[\n\t]+')

str = re.sub(patten,',',out)

end = str.split(',')[:-1][::2]

local = str.split(',')[:-1]

#print local

#print end

for i in end:

#    print i,i[-1]

    if i[-1] == 'G':

#        print 'G===' 

        print "size is ", i[0:-1]

        if float(i[0:-1]) > 2:

#            print end.index(i)

#            print local[end.index(i)*2+1]

            cmd = 'cat /dev/null>%s' %local[end.index(i)*2+1]

            print cmd

            os.system(cmd)

                      

这个和上面的差不多,原理是一样的。

感觉Python写脚本对于初学者来说是很不好的,不知道从哪里下手。


还有简单的方法,就是调用: os.path.getsize() 然后调用os.walk() 遍历目录。直接得到绝对路径下面的文件大小,然后可以进行操作。 这个方法可以直接写成方法,然后就可以随地调用了。

本文出自 “庞飞” 博客,请务必保留此出处http://pangfei.blog.51cto.com/8832397/1683227