Revision: 66296
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at April 12, 2014 02:49 by JordanRowles
Initial Code
#!/usr/bin/env python #------------------------------------------------------------------------------- # Name: systemInformation.py # Version: 1.1 # Author: Jordan Rowles # Created: 21/02/2014 # Copyright (c) Jordan Rowles 2014 # GNU General Public License Version 3 or Later #------------------------------------------------------------------------------- import os, sys, platform import socket, subprocess import formatDate sep = ' ' # 2 Spaces class argumentError(ValueError): 'Error relating to arguments when calling functions' def getMachineInfoDict(): 'Gets all information inside a dictionary' infoDict = { 'OS Name:' : getOSName(), 'Platform (Bit):' : getPlatform(), 'Win Reg Ver:' : registryVerWin(), 'Win Version:' : getWindowsInformation(), 'Architecture:' : getArchitecture(), 'Machine Type:' : getMachineType(), 'Network Name:' : getNetworkName(), 'Machine Platform:' : getMachinePlatform(), 'Processor:' : processorInformation(), 'Operating Sys:' : getOperatingSystem(), 'Platform Release:' : platformRelease(), 'Machine Info:' : returnMachineInfo(), 'Win Version:' : getWindowsVersion(), 'Mac Version:' : getMacOSVersion(), 'Unix Version:' : getUnixVersion(), 'Python Version' : pythonVersion(), 'Python/C API Ver:' : pythonCAPIVersion(), 'Version Information:' : versionInformation()} return infoDict def getInfoDictKeys(): infoDictKeys = infoDict.keys() return infoDictKeys def getInfoDictVals(): infoDictVals = infoDict.values() return infoDictVals def getIPv4(): 'Returns local IP (v4)' IP = socket.gethostbyname(socket.gethostname()) return IP def getInformationFromCMD(): '''Uses subprocess module to enter ipconfig into cmd, parse the string and return it as a key-value dictionary. ''' process = subprocess.Popen('ipconfig /all', stdout=subprocess.PIPE, shell=True) output = process.communicate() output = output[0] # Parse and Format into dictionary result = {} for eachRow in output.split('\n'): if ': ' in eachRow: key, value = eachRow.split(': ') result[key.strip(' .')] = value.strip() return result ## SOME RETURNS NEED TO BE PROPERLY FORMATTED TO STRINGS ## I.E. FROM TUPLES AND LISTS def getOSName(formStr=0): '''OS Names: posix, nt, os2, ce, java or rescos Args: 0 - Unformatted (string) 1 - Capitalised (may not work for os2?) 2 - Returns formatted for display (string) 3+ - Raises argumentError exception ''' if formStr == 0: string = os.name elif formStr == 1: string = os.name.upper() elif formStr == 2: string = 'OS Name: %s' % os.name else: raise argumentError('Enter integer from 0-2') return string def getPlatform(formStr=False): 'atheos, riscos, os2emx, os2, darwin, cygwin, win32 or linux2' if formStr == False: string = sys.platform else: string = 'Platform (bit): %s' % sys.platform return string def registryVerWin(formStr=False): 'Windows registry keys version' if formStr == False: string = sys.winver else: string = 'Win Reg Version: %s' % sys.winver return string def getWindowsInformation(formStr=0): '''Gets Windows information: Major, Minor, Build, Platform and SP. Args: 0 - Unformatted (function and tuple) (default) 1 - Returns formatted for dispaly (string) 2 - Returns formatted without label (string) 3+ - Raises argumentError exception''' if formStr == 0: string = sys.getwindowsversion() elif formStr == 1: string = 'Win Info: %s' % formatWindowsInformation() elif formStr == 2: string = formatWindowsInformation() else: raise argumentError('Enter integer from 0-2') return string def getArchitecture(formStr=0): '''Sets system architecture (bit, linkage/type). Args: 0 - Unformatted (tuple) (default) 1 - Returns just the bit (string) 2 - Returns just the linkage (string) 3 - Fully formatted for display (string) 4 - Returns comma seperated bit and linkage 5+ - Raises argumentError exception.''' architecture = platform.architecture() if formStr == 0: string = architecture #Unformatted elif formStr == 1: string = architecture[0] #Bit elif formStr == 2: string = architecture[1] #Linkage elif formStr == 3: string = 'Architecture: %s, %s' % (architecture[0], architecture[1]) elif formStr == 4: string = '%s, %s' % (architecture[0], architecture[1]) else: raise argumentError('Enter integer from 0-3') return string def getMachineType(formStr=False): 'Returns machine type (i386, x86)' if formStr == False: string = platform.machine() else: string = 'Machine Type: %s' % platform.machine() return string def getNetworkName(formStr=False): 'Gets machines name on a network (MK02514)' if formStr == False: string = platform.node() else: string = 'Network Name: %s' % platform.node() return string def getMachinePlatform(formStr=False): 'Gets full machine information Windows-8-6.2.9200' if formStr == False: string = platform.platform() else: string = 'Machine Platform: %s' % platform.platform() return string def processorInformation(formStr=False): 'Gets processor information' if formStr == False: string = platform.processor() else: string = 'Processor: %s' % platform.processor() return string def getOperatingSystem(formStr=False): 'Gets OS name' if formStr == False: string = platform.system() else: string = 'Operating Sys: %s' % platform.system() return string def platformRelease(formStr=False): 'Gets the OS version' if formStr == False: string = platform.release() else: string = 'Platform Release: %s' % platform.release() return string def returnMachineInfo(formStr=False): 'Returns a tuple of: OS, network name, OS version, @, processor info' if formStr == False: string = platform.uname() else: string = 'Machine Info: %s' % platform.uname() return string def getWindowsVersion(formStr=False): 'Get Windows Platform. Specific.' if formStr == False: string = platform.win32_ver() else: string = 'Win Version: %s' % platform.win32_ver() return string def getMacOSVersion(formStr=False): 'Gets Mac Platform. Specific' if formStr == False: string = platform.mac_ver() else: string = 'Mac Version: %s' % platform.mac_ver() return string def getUnixVersion(formStr=False): 'Get Unix Platform. Specific' if formStr == False: string = platform.dist() else: string = 'Unix Version: %s' % platform.dist() return string # -- PYTHON INFOMRATION -- def pythonVersion(formStr=False): 'Version of Python' if formStr == False: string = sys.version else: string = 'Python Version: %s' % sys.version return string def pythonCAPIVersion(formStr=False): 'Python/C Interpreter API Version' if formStr == False: string = sys.api_version else: string = 'Python/C Api Ver: %s' % sys.api_version return string def versionInformation(formStr=False): 'Python version as named tuple - NEEDS FORMATTING' pass if formStr == False: return sys.version_info else: pass #Format Here def getFileSystemEncoding(formStr=False): 'Gets the character encoding for the local file system' encoding = sys.getfilesystemencoding() if formStr == False: encoding = encoding elif formStr == True: encoding = encoding.upper() return encoding # Format Machine Information def formatWindowsInformation(build=False): 'Formats information from sys.getwindowsversion()' windowsInfo = getWindowsInformation() winMajor = windowsInfo[0] # Major Version winMinor = windowsInfo[1] # Minor Version winBuild = windowsInfo[2] # Build Number servicePack = windowsInfo[4] # Service Pack platform = windowsInfo[3] # Platform Type if platform == 0: platType = '3.1' # 0=Win3.1 if platform == 1: platType = '95/98/ME' # 1=95/98/ME if platform == 2: platType = 'NT' # 2=NT/2000/XP/x64 if platform == 3: platType = 'CE' # 3 = CE winNum = getWindowsVersion()[0] if build == False: formInfo = 'Windows %s %s %i.%i' % (winNum, platType, winMajor, winMinor) else: formInfo = 'Windows %s %s %i.%i %i' % (winNum, platType, winMajor, winMinor, winBuild) return formInfo def formatEnvironmentInformation(formStr=0): 'Formats information from os.environ' environInfo = os.environ userName = environInfo['USERNAME'] compName = environInfo['COMPUTERNAME'] domainNa = environInfo['USERDOMAIN'] userProf = environInfo['USERPROFILE'] if formStr == 1: string = '%s is logged in at %s on %s' % (userName, compName, domainNa) if formStr == 2: string = userName if formStr == 3: string = compName if formStr == 4: string = domainNa if formStr == 5: string = userProf if formStr == 0: string = [userName, compName, domainNa, userProf] return string # Write Information To File def fileName(): 'Generate filename for information' filename = '%s.txt' % getNetworkName() return filename def writeInfoFile(): 'Write information to file' file = open(fileName(), 'w') file.write('OS Name: ', getOSName()) file.close() def returnInformation(): 'Returns all information in the syntax - Name: (sep) value()' print ' OS Name:%s%s, %s' % (sep, getOSName(1), getOperatingSystem()) print 'Platform (bit):%s%s' % (sep, getPlatform()) print ' Win Info:%s%s' % (sep, getWindowsInformation(2)) print ' Architecture:%s%s' % (sep, getArchitecture(4)) print 'Processor Type:%s%s' % (sep, getMachineType()) print ' Network Name:%s%s' % (sep, getNetworkName()) print ' Processor:%s%s' % (sep, processorInformation()) print ' IP Address:%s%s' % (sep, getIPv4()) print ' User Name:%s%s' % (sep, formatEnvironmentInformation(2)) print ' Domian:%s%s' % (sep, formatEnvironmentInformation(4)) # [Script] Call returnInformation() on execution def getBasicInfo(): returnInformation() if __name__ == '__main__': pass #getBasicInfo()
Initial URL
SystemInformationPy
Initial Description
Gets system, machine, OS and networking information and either writes it to a file or returns the data as a string.
Initial Title
SystemInformation.py
Initial Tags
python
Initial Language
Python