Beispiel: SYSINFO
#!/usr/bin/python
import os,sys
if (sys.version[0] < '1') or \
((sys.version[0] == '1') and (sys.version[2] < '5')) :
print "You need at least Python 1.5 !"
sys.exit()
import time
import string,re
import socket
import stat
FALSE,TRUE = range(2)
##############################################################################
def readpipe(name) :
try :
f = os.popen(name, "r")
l = f.readlines()
f.close()
except IOError :
return FALSE
return l
def readfile(name) :
try :
f = open(name, "r")
l = f.readlines()
f.close()
except IOError :
return FALSE
return l
def file_exist(name) :
try :
s = os.stat(name)
except os.error :
return FALSE
return TRUE
def print_file(name) :
f = open(name, "r")
s = f.readlines()
f.close()
for l in s :
while (len(l) > 0) and (l[-1] == '\012') :
l = l[:-1]
print l
def print_file_if_exist(name) :
if file_exist(name) :
print_file(name)
return TRUE
else :
return FALSE
##############################################################################
def begin_do(name) :
print name, ":"
l = ""
for i in range(len(name)+2) :
l = l + "="
print l
def end_do(name) :
print
def _timeperiod(t) :
day = t / (60*60*24)
t = t % (60*60*24)
hou = t / (60*60)
t = t % (60*60)
min = t / 60
t = t % 60
sec = t
return (day,hou,min,sec)
#######################################
def do_issue() :
begin_do("Issue")
if print_file_if_exist("/etc/issue") == FALSE :
print "( /etc/issue not found, skipping )"
end_do("Issue")
#######################################
def do_system() :
begin_do("System info")
##### uptime
l = readfile("/proc/uptime")
now = time.time()
(uptime,idletime) = string.split(l[0])
uptime = int(eval(uptime))
idletime = int(eval(idletime))
sysstart = now - uptime
print "System start : %s" % (time.strftime("%c", time.localtime(sysstart)))
d,h,m,s = _timeperiod(uptime)
print "System uptime: %d days %d hours %d minutes" % (d,h,m)
if idletime != 0 :
d,h,m,s = _timeperiod(idletime)
p = (100*idletime)/uptime
print "Idle uptime : %d days %d hours %d minutes (%d%%)" % (d,h,m, p)
else :
print "Idle uptime : ( no information due to kernel bug )"
##### load
l = readfile("/proc/loadavg")
l1m,l5m,l15m,t,d = string.split(l[0])
rt,nt = string.split(t, "/")
print "System load : %s (1min) %s (5min) %s (15min)" % (l1m,l5m,l15m)
print "Task info : %s tasks %s running" % (nt,rt)
##### user
l = readpipe("/usr/bin/who --count")
x,y = string.split(l[1], "=")
nu = eval(y)
print "Users : %d" % (nu)
end_do("System info")
#######################################
def do_kernel() :
begin_do("Kernel info")
##### image
l = readfile("/proc/1/environ")
print "Lilo image :",
if l :
l = string.split(l[0], "\0")
for i in l :
x,y = string.split(i, "=")
if x == "BOOT_IMAGE" :
print y
else :
print "( access denied )"
##### version
l = readfile("/proc/version")
r = re.match("^(.*) \((.*)\) \((.*)\) (#.*)$", l[0])
print "OS Release :", r.groups()[0]
print " Version :", r.groups()[3]
print " built by :", r.groups()[1]
print " built with:", r.groups()[2]
##### filesystems
l = readfile("/proc/filesystems")
print "Filesystems :",
for i in l :
x = string.split(i)
print x[-1],
print
##### devices
l = readfile("/proc/devices")
i = 0
while l[i] == "Character devices:\012" :
i = i + 1
print "Char devices :",
while l[i] != "Block devices:\012" :
s = string.split(l[i])
if len(s) == 2 :
print "%s=%s" % (s[1], s[0]) ,
i = i + 1
print
print "Block devices:",
for i in range(i+1,len(l)) :
s = string.split(l[i])
if len(s) == 2 :
print "%s=%s" % (s[1], s[0]) ,
print
end_do("Kernel info")
#######################################
def do_network() :
begin_do("Network info")
##### hostname
print "Hostname :", socket.gethostname()
##### domainname (NIS)
l = readfile("/proc/sys/kernel/domainname")
print "Domainname :", l[0][:-1]
##### interfaces
l = readfile("/proc/net/dev")
for i in range(2,len(l)) :
s = string.split(l[i],":")
n = string.strip(s[0])
print "Interface :", n
cmd = "/sbin/ifconfig " + n
l2 = readpipe(cmd)
print " type :", l2[0][21:-1]
r = re.match(" *inet addr:(.*) Bcast:(.*) Mask:(.*)", l2[1])
n = r.groups()[0]
print " IP : %s (%s)" % (n, socket.gethostbyaddr(n)[0])
r = re.match(" *(.*) MTU.*", l2[2])
print " state :", r.groups()[0]
end_do("Network info")
#######################################
def do_cpu() :
begin_do("CPU info")
l = readfile("/proc/cpuinfo")
cpus = []
info = {}
for i in range(len(l)) :
s = string.split(l[i],":")
for j in range(len(s)) :
s[j] = string.strip(s[j])
if s[0] == "" :
continue
if (s[0] == "processor") and (len(info) > 0) :
cpus.append(info)
info = {}
info[s[0]] = s[1]
cpus.append(info)
print "Nr of CPUs :", len(cpus)
ni = 0
for i in cpus :
print "CPU %d : %s" % (ni, i["cpu"])
print " type : %s stepping %s" % (i["model"], i["stepping"])
print " vendor : %s" % (i["vendor_id"])
print " speed : %s Bogomips" % (i["bogomips"])
print " bugs :",
for s in ["fdiv_bug", "hlt_bug", "f00f_bug"] :
if i[s] == "yes" :
print s,
print
print " flags : %s" % (i["flags"])
ni = ni + 1
end_do("CPU info")
#######################################
def do_hardware() :
begin_do("Hardware info")
##### meminfo
l = readfile("/proc/meminfo")
x = string.split(l[1])
total = eval(x[1])
used = eval(x[2])
free = eval(x[3])
shared = eval(x[4])
buffers = eval(x[5])
cached = eval(x[6])
x = string.split(l[2])
stotal = eval(x[1])
sused = eval(x[2])
sfree = eval(x[3])
memtotal = os.stat("/proc/kcore")[stat.ST_SIZE]
m = 1024*1024
print "Memory RAM : %d MB (%d MB kernel, %d MB free)" % (memtotal/m, (memtotal-total)/m, free/m)
print " usage : %d MB shared %d MB buffers %d MB cached" % (shared/m, buffers/m, cached/m)
print "Swap area : %d MB (%d MB used)" % (stotal/m, sused/m)
##### vga
l = readfile("/proc/pci")
for i in l :
r = re.match(".*VGA compatible controller: (.*)\.$", i)
if r :
print "Graphic :", r.groups()[0]
##### ethernet
# l = readfile("/proc/pci")
for i in l :
r = re.match(".*Ethernet controller: (.*)\.$", i)
if r :
print "Ethernet :", r.groups()[0]
##### usb
# l = readfile("/proc/pci")
for i in l :
r = re.match(".*USB Controller: (.*)\.$", i)
if r :
print "USB :", r.groups()[0]
##### ide
# l = readfile("/proc/pci")
for i in l :
r = re.match(".*IDE interface: (.*)\.$", i)
if r :
print "IDE :", r.groups()[0]
##### host bridge
# l = readfile("/proc/pci")
for i in l :
r = re.match(".*Host bridge: (.*)\.$", i)
if r :
print "Host bridge :", r.groups()[0]
end_do("Hardware info")
##############################################################################
def header() :
t = time.time()
lt = time.localtime(t)
lts = time.strftime("%c" ,lt)
print "+-----------------------------------------------------------------------------+"
print "| SYSINFO kapet@informatik.tu-chemnitz.de",
for i in range(32-len(lts)) :
print "",
print lts,"|"
print "+-----------------------------------------------------------------------------+"
print
def main() :
l = readpipe("/bin/uname -s")
if l[0] != "Linux\012" :
print "ERROR: This does not seem to be a linux system and is currently"
print " not supported!"
sys.exit()
# l = readpipe("/bin/uname -r")
# if l[0][0:5] != "2.0.3" :
# print "ERROR: Only Linux versions 2.0.3x have been tested!"
# sys.exit()
header()
do_issue()
do_system()
do_kernel()
# do_network()
# do_cpu()
do_hardware()
if __name__ == '__main__' :
main()