最近老是碰到磁盘爆满,一查之下是/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() 遍历目录。直接得到绝对路径下面的文件大小,然后可以进行操作。 这个方法可以直接写成方法,然后就可以随地调用了。