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