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