使用python获取linux系统的各种信息Word格式文档下载.docx
- 文档编号:19242022
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:16
- 大小:23.21KB
使用python获取linux系统的各种信息Word格式文档下载.docx
《使用python获取linux系统的各种信息Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《使用python获取linux系统的各种信息Word格式文档下载.docx(16页珍藏版)》请在冰豆网上搜索。
44:
29utc2013'
x86_64'
)
如果你已知道linux上的uname命令,那么你就会认出来这个函数就是这个命令的一个接口。
在python2上,它会返回一个包含系统类型(或者内核版本),主机名,版本,发布版本,机器的硬件以及处理器信息元组(tuple)。
你可以使用下标访问个别属性,像这样:
platform.uname()[0]
'
在python3上,这个函数返回的是一个命名元组:
uname_result(system='
node='
release='
version='
29
utc2013'
machine='
processor='
因为返回结果是一个命名元组,这就可以简单地通过名字来指定特定的属性,而不是必须记住下标,像这样:
platform.uname().system
platform模块还有一些上面属性的直接接口,像这样:
platform.system()
platform.release()
linux_distribution()函数返回的有关你所在的linux发布版本的详细信息。
例如,在fedora18系统上,这个命令会返回如下信息:
platform.linux_distribution()
fedora'
18'
sphericalcow'
这个返回结果中包含了版本发布名,版本以及代号元组。
特定的python版本支持的发布版本上可以通过_supported_dists显示的值获得。
platform._supported_dists
suse'
debian'
redhat'
centos'
mandrake'
mandriva'
rocks'
slackware'
yellowdog'
gentoo'
unitedlinux'
turbolinux'
如果你的linux发布版本不在其中(或者其中之一的衍生发行版)。
那么你很可能调用了上面这个函数而看不到任何有用的信息。
platform模块的最后一个函数,我们将会看看architecture()函数。
当你无参的调用这个函数,它会返回包含架构位数以及python可执行的格式的元组,像这样:
platform.architecture()
64bit'
elf'
在32位的系统上,你将会看到:
32bit'
如果你指定了系统上其他任何可执行的,你都将会获得相似的结果,如同这样:
platform.architecture(executable='
/usr/bin/ls'
鼓励探索platform模块的除了这些的其它函数,找出你现在运行的python版本。
如果你想知道这个模块是如何获取这些信息的,你可以深入查看python源码目录下的lib/platform.py文件。
os和sys模块也可以获得一些系统属性,例如原生的字节序。
接下来,我们超越python标准库模块,去探索一些在linux系统通过proc和sysfs文件系统使之访问信息成为可能。
注意的是通过文件系统来访问信息将会在不同的硬件架构有所不同。
所以在读本文或是写脚本时要时刻记住可以试图从这些文件获取信息。
获取cpu信息
/proc/cpuinfo文件包含了你的系统处理器单元的信息。
例如,这里就是python版的linux命令cat/proc/cpuinfo所做的事:
#!
/usr/bin/envpython
printoutthe/proc/cpuinfo
nbsp;
&
file
from__future__importprint_function
withopen('
/proc/cpuinfo'
)asf:
forlineinf:
print(line.rstrip('
\n'
))
当你使用python2或者python3执行这个程序时,你会在屏幕上看到所有/proc/cpuinfo的内容(在上面的程序里,rstrip()方法用来删除每行末尾的换行符)
在下面的代码里列举了使用startwith()字符串方法来显示你的处理器单元的模式。
printthemodelofyour
processingunits
#ignoretheblanklineseparatingtheinformationbetween
#detailsabouttwoprocessingunits
ifline.strip():
ifline.rstrip('
).startswith('
modelname'
):
model_name=line.rstrip('
).split('
:
'
)[1]
print(model_name)
当你运行这个程序后,你应该会看到你的每个处理器单元的模式名。
例如,这里就是在我电脑上所看到的。
intel(r)core(tm)i7-3520mcpu@2.90ghz
迄今为止,我们已有两种方式来找出我们所使用的系统的架构。
从技术上讲是正确的,两个方式实际上报告了你系统运行的内核架构,所以,如果你的电脑是64位的,但是运行的是32位的内核,然后上面的方法还是将会显示为32位的架构。
你可以通过从/proc/cpuinfo所列举的标志中查找lm标志,来找到你的电脑的真实的架构。
lm标志代表了长模式,只有64位架构的才会显示它。
下面的程序将会指导你怎样做:
findtherealbitarchitecture
flags'
)\
orline.rstrip('
features'
if'
lm'
inline.rstrip('
).split():
print('
64-bit'
else:
32-bit'
如我们所看到那样,读取/proc/cpuinfo文件以及使用简单文本处理技术就可以获得我们要查找的数据是可能的。
为了给其他程序更好的使用这些数据,一个更好的主意就是使/proc/cpuinfo的内容成为标准的数据结构,譬如字典(dictionary)。
这个注意很简单:
如果你查看这个文件的内容,你就会发现对于每个处理器单元,都有好些键值对(在先前的例子中,我们打印了每个处理器的模型名,即模型名就是关键字)。
不同的处理器单元的信息可以使用空白行隔开。
构造一个字典数据结构包含每个处理器单元的关键字是很简单的。
对于每个关键字,对于处理器单元的值都在/proc/cpuinfo文件中。
下面的代码将会指导你怎么做。
/usr/bin/env/python
/proc/cpuinfoasapythondict
fromcollectionsimportordereddict
importpprint
defcpuinfo():
'
returntheinformationin/proc/cpuinfo
asadictionaryinthefollowingformat:
cpu_info['
proc0'
]={...}
proc1'
cpuinfo=ordereddict()
procinfo=ordereddict()
nprocs=0
withopen('
ifnotline.strip():
#endofoneprocessor
cpuinfo['
proc%s'
%nprocs]=procinfo
nprocs=nprocs+1
#reset
iflen(line.split('
))==2:
procinfo[line.split('
)[0].strip()]=line.split('
)[1].strip()
)[0].strip()]='
returncpuinfo
if__name__=='
__main__'
cpuinfo=cpuinfo()
forprocessorincpuinfo.keys():
print(cpuinfo[processor]['
])
这段代码中使用了ordereddict(有序字典)而不是常规的字典,能够使用键值有序的存储在文件里。
所以,第一个处理器单元的数据之后就是第二个处理器单元的数据,以此类推。
你可以使用过滤器来过滤你所查找的信息(如同在if__name__=='
块中演示的那样)。
上面的程序每次执行后都会打印每个处理器单元的模型名(如通过cpuinfo[processor]['
]语句表明的那样)
获取内存信息
和/proc/cpuinfo相似,文件/proc/meminfo包含了你电脑的主存的信息。
下面的这个程序创建了一个使用这个文件的内容填充的字典。
/usr/bin/envpython
defmeminfo():
returntheinformationin/proc/meminfo
asadictionary'
meminfo=ordereddict()
/proc/meminfo'
meminfo[line.split('
)[0]]=line.split('
returnmeminfo
#print(meminfo())
meminfo=meminfo()
totalmemory:
{0}'
.format(meminfo['
memtotal'
]))
freememory:
memfree'
像先前的,通过它的关键字,你可以访问任何你查询的指定信息(在if__name__==__main__块中有所表示)。
当你执行这个程序,你该会看到像下面类似的输出:
totalmemory:
7897012kb
freememory:
249508kb
网络统计信息
接下来,我们会探索我们电脑系统的网络设备。
我们将会获得系统的网络接口,以及当系统重启之后通过它们数据发送和接受数据的信息。
/proc/net/dev文件让这些信息可用。
如果你检查了这个文件的内容,你就会注意到头一两行包含了头信息等等,这个文件第一列是网络接口名,第二和第三列显示了接收和发送的字节数信息(例如总发送字节数,包数,错误等等)。
这里我们所感兴趣的就是他哦难过不同的网络设备提取出总发送数据和接收数据。
下面的代码展示了怎么从/proc/net/dev文件中提取出这些信息。
fromcollectionsimportnamedtuple
defnetdevs():
rxandtxbytesforeachofthenetworkdevices'
/proc/net/dev'
net_dump=f.readlines()
device_data={}
data=namedtuple('
data'
['
rx'
'
tx'
forlineinnet_dump[2:
]:
line=line.split('
ifline[0].strip()!
='
lo'
device_data[line[0].strip()]=data(float(line[1].split()[0])/(1024.0*1024.0),
float(line[1].split()[8])/(1024.0*1024.0))
returndevice_data
netdevs=netdevs()
fordevinnetdevs.keys():
{0}:
{1}mib{2}mib'
.format(dev,netdevs[dev].rx,netdevs[dev].tx))
当你运行上面的程序,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 使用 python 获取 linux 系统 各种 信息