python 清理mail spool 下的小腳本

   最近老是碰到磁盤爆滿,一查之下是/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() 遍歷目錄。直接得到絕對路徑下面的文件大小,然後可以進行操作。 這個方法可以直接寫成方法,然後就可以隨地調用了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章