options="all"#all,one,select
fragmetvol=[]#one example:['C'],all example [],select example ['C','D']

import os
import re
from subprocess import PIPE,Popen
import ctypes
import re
import sys
def alert(arg):
    sys.stderr.write("%d%d%d" % (arg, arg, arg))
    
class disable_file_system_redirection:
    _disable = ctypes.windll.kernel32.Wow64DisableWow64FsRedirection
    _revert = ctypes.windll.kernel32.Wow64RevertWow64FsRedirection
    def __enter__(self):
        self.old_value = ctypes.c_long()
        self.success = self._disable(ctypes.byref(self.old_value))
    def __exit__(self, type, value, traceback):
        if self.success:
            self._revert(self.old_value)

def defrag(fragmetvol):
    with disable_file_system_redirection():
        print("Fragment analysis....")
        process=Popen("defrag -u %s:\ "%fragmetvol,stderr=PIPE,stdout=PIPE)
        res,err=process.communicate()
        if err:
            print err
        else:
            print res
        fragmetpercent=re.findall("Total\s+fragmented\s+space\s+=\s+\d+%",res)
        fragpercentage=int(fragmetpercent[0].split()[-1].replace("%",""))
        if fragpercentage>30:
            alert(1)
            processfragment=Popen("defrag C:\ /d /u ")
        else:
            alert(0)
            print "The fragement percentage is less than 30% \n "+fragmetpercent[0]
        
        

if options=="one":
    print "option: %s"%options
    if len(fragmetvol)==1:
        defrag(fragmetvol[0])
    else:
        print "Failure...."
elif options=="all":
    print "option: %s"%options
    if len(fragmetvol)==0:
        vols=os.popen("wmic logicaldisk where drivetype=3 get caption").read().split()[1:]
        fragl=[i.replace(":","") for i in  vols]
        for i in fragl:
            defrag(i)
    else:
        print "Failure..."
else:
    print "option: %s"%options
    if len(fragmetvol)>1:
        for i in fragmetvol:
            defrag(i)
    else:
        print "Failure..."

        
