[CentralOH] Help with learning how to use a class (please don't laugh :) )

Eric Lake ericlake at gmail.com
Wed Jul 9 17:14:43 CEST 2008


That seems to be the fix there. If I have something like the following:

    def GetTotalDiskSpace(self, drive):
        self.drive = drive
        for disk in self.server.Win32_LogicalDisk():
            if disk.Name == self.drive:
                total = long(disk.Size) /1073741824.0
        return total

    def GetFreeDiskSpace(self, drive):
        self.drive = drive
        for disk in self.server.Win32_LogicalDisk():
            if disk.Name == self.drive:
                free = long(disk.FreeSpace) /1073741824.0
        return free

    def GetUsedDiskSpace(self, drive):
        self.drive = drive
        total = GetTotalDiskSpace(self.drive)
        free = GetTotalDiskSpace(self.drive)
        used = (total - free)
        return used

should I change the:

total = GetTotalDiskSpace(self.drive)

to

total = self.GetTotalDiskSpace(self.drive)

On Wed, Jul 9, 2008 at 11:07 AM, Steven Huwig <steven_h at acm.org> wrote:
> How about putting initialization code in the __init__ method instead?
>
>   def __init__(self, hostname):
>       self.host = hostname
>       self.server = wmi.WMI(self.host)
>
> and replace all references to server with self.server .
>
>
> On Wed, Jul 9, 2008 at 10:55 AM, Eric Lake <ericlake at gmail.com> wrote:
>> The output above was from a run of the script with
>> GetLocalDrives(self) set. I had to change it to the following to make
>> it work:
>>
>> import sys
>> import wmi
>>
>> class SysInfo(object):
>>    def __init__(self, hostname):
>>        self.host = hostname
>>
>>    def GetLocalDrives(self):
>>        server = wmi.WMI(self.host)
>>        driveList = []
>>        for disk in server.Win32_LogicalDisk():
>>            if disk.DriveType == 3:
>>                driveList.append(str(disk.Name))
>>        return driveList
>>
>> I would like to not have to do 'server = wmi.WMI(self.host)' in every
>> method. Once I call mach = diskspace.SysInfo('localhost') I would like
>> the wmi stuff to be set.
>>
>> On Wed, Jul 9, 2008 at 10:26 AM, Sam Corder <samus at codeargyle.com> wrote:
>>> Change def GetLocalDrives()
>>> to
>>> def GetLocalDrives(self)
>>> and it will work.  All methods attached to an instance of a class need to take self as the first parameter.
>>>
>>> ----- Original Message -----
>>> From: Eric Lake <ericlake at gmail.com>
>>> To: centraloh at python.org
>>> Sent: Wednesday, July 9, 2008 10:23:19 AM GMT-0500 Auto-Detected
>>> Subject: [CentralOH] Help with learning how to use a class (please don't laugh :) )
>>>
>>> I am trying to write a script that I can use to gather information
>>> about the windows servers we have in our network. I started off with
>>> it being just a procedural script and I am now trying to put all of
>>> the functions in a class. This is still very much a work in progress.
>>> What can I do to improve on this / make it work? Any help would be
>>> appreciated. When I run the following from ipython to test it against
>>> my local machine I get this output:
>>>
>>> In [64]: server = diskspace.SysInfo('localhost')
>>>
>>> In [65]: server.GetLocalDrives()
>>> ---------------------------------------------------------------------------
>>> TypeError                                 Traceback (most recent call last)
>>>
>>> C:\Documents and Settings\elake\Desktop\<ipython console> in <module>()
>>>
>>> TypeError: GetLocalDrives() takes no arguments (1 given)
>>>
>>>
>>>
>>> import sys
>>> import wmi
>>>
>>> class SysInfo(object):
>>>    def __init__(self, hostname):
>>>        self.host = hostname
>>>        server = wmi.WMI(self.host)
>>>
>>>    def GetLocalDrives():
>>>        driveList = []
>>>        for disk in self.Win32_LogicalDisk():
>>>            if disk.DriveType == 3:
>>>                driveList.append(str(disk.Name))
>>>        return driveList
>>>
>>>    def GetTotalDiskSize(drive):
>>>        for disk in server.Win32_LogicalDisk():
>>>            if disk.Name == drive:
>>>                total = long(disk.Size) /1073741824.0
>>>        return total
>>>
>>>    def GetFreeDiskSpace(drive):
>>>        for disk in server.Win32_LogicalDisk():
>>>            if disk.Name == drive:
>>>                free = long(disk.FreeSpace) /1073741824.0
>>>        return free
>>>
>>>    def GetUsedDiskSpace(drive):
>>>        total = GetTotalDiskSpace(drive)
>>>        free = GetTotalDiskSpace(drive)
>>>        used = (total - free)
>>>        return used
>>>
>>>    def GetStorage(self):
>>>        server = wmi.WMI(self.host)
>>>        print "Gather information on %s\n" % self.host
>>>        outfile.write("%s ::\n" % self.host)
>>>        for disk in server.Win32_LogicalDisk():
>>>            if disk.DriveType == 3:
>>>                total = long(disk.Size) /1073741824.0
>>>                free = long(disk.FreeSpace) /1073741824.0
>>>                used = (total - free)
>>>                per_used = (used * 100) / total
>>>                outfile.write("\tDrive %s\n" % disk.Name)
>>>                outfile.write("\t\tTotal Size: %3.2f GB\n" % total)
>>>                outfile.write("\t\tFree Space: %3.2f GB\n" % free)
>>>                outfile.write("\t\tUsed Space: %3.2f GB\n" % used)
>>>                outfile.write('\t\tPercent Used: %.2f \n' % per_used)
>>>
>>>    def GetNodeName():
>>>        for os in server.Win32_OperatingSystem():
>>>            activeNode = server.CSName
>>>            return activeNode
>>>
>>> if __name__ == '__main__':
>>>
>>>    infile = open('san.txt', 'r')
>>>    outfile = open('test4.txt', 'w')
>>>
>>>    for host in infile.readlines():
>>>        host = host.strip()
>>>        try:
>>>            server = SysInfo(host)
>>>            server.GetStorage()
>>>            outfile.write("\n")
>>>        except KeyboardInterrupt:
>>>            print "The user canceled the job.\n"
>>>            sys.exit(0)
>>>        except:
>>>            outfile.write("%s does not appear to be available.\n\n" % host)
>>>
>>>    print "Done!\n"
>>>
>>>    infile.close()
>>>    outfile.close()
>>>
>>> --
>>> Thanks,
>>>
>>> Eric Lake
>>> _______________________________________________
>>> CentralOH mailing list
>>> CentralOH at python.org
>>> http://mail.python.org/mailman/listinfo/centraloh
>>>
>>>
>>
>>
>>
>> --
>> Thanks,
>>
>> Eric Lake
>> _______________________________________________
>> CentralOH mailing list
>> CentralOH at python.org
>> http://mail.python.org/mailman/listinfo/centraloh
>>
>



-- 
Thanks,

Eric Lake


More information about the CentralOH mailing list