探索platform模块

platform模块在标准库中,它有很多运行我们获得众多系统信息的函数。让我们运行Python解释器来探索它们中的一些函数,那就从platform.uname()函数开始吧:

1	>>> import platform
2	>>> platform.uname()
3	('Linux', 'fedora.echorand', '3.7.4-204.fc18.x86_64', '#1 SMP Wed Jan 23 16:44:29 UTC 2013', 'x86_64'

如果你已知道linux上的uname命令,那么你就会认出来这个函数就是这个命令的一个接口。在Python 2上,它会返回一个包含系统类型(或者内核版本),主机名,版本,发布版本,机器的硬件以及处理器信息元组(tuple)。你可以使用下标访问个别属性,像这样:

1	>>> platform.uname()[0]
2	'Linux'

在Python 3上,这个函数返回的是一个命名元组:

1	>>> platform.uname()
2	 
3	uname_result(system='Linux', node='fedora.echorand',
4	release='3.7.4-204.fc18.x86_64', version='#1 SMP Wed Jan 23 16:44:29
5	UTC 2013', machine='x86_64', processor='x86_64')

因为返回结果是一个命名元组,这就可以简单地通过名字来指定特定的属性,而不是必须记住下标,像这样:

1	>>> platform.uname().system
2	'Linux'

platform模块还有一些上面属性的直接接口,像这样:

1	>>> platform.system()
2	'Linux'
3	 
4	>>> platform.release()
5	'3.7.4-204.fc18.x86_64'

linux_distribution()函数返回的有关你所在的linux发布版本的详细信息。例如,在Fedora 18系统上,这个命令会返回如下信息:

1	>>> platform.linux_distribution()
2	('Fedora', '18', 'Spherical Cow')

这个返回结果中包含了版本发布名,版本以及代号元组。特定的Python版本支持的发布版本上可以通过_supported_dists显示的值获得

1	>>> platform._supported_dists
2	('SuSE', 'debian', 'fedora', 'redhat', 'centos', 'mandrake',
3	'mandriva', 'rocks', 'slackware', 'yellowdog', 'gentoo',
4	'UnitedLinux', 'turbolinux')

如果你的linux发布版本不在其中(或者其中之一的衍生发行版)。那么你很可能调用了上面这个函数而看不到任何有用的信息。

   platform模块的最后一个函数,我们将会看看architecture()函数。当你无参的调用这个函数,它会返回包含架构位数以及python可执行的格式的元组,像这样:
1	>>> platform.architecture()
2	('64bit', 'ELF')

在32位的系统上,你将会看到:

1	>>> platform.architecture()
2	('32bit', 'ELF')

如果你指定了系统上其他任何可执行的,你都将会获得相似的结果,如同这样:

1	>>> platform.architecture(executable='/usr/bin/ls')
2	('64bit', 'ELF')

鼓励探索platform模块的除了这些的其它函数,找出你现在运行的Python版本。如果你想知道这个模块是如何获取这些信息的,你可以深入查看PYthon源码目录下的Lib/platform.py文件。
os和sys模块也可以获得一些系统属性,例如原生的字节序。接下来,我们超越Python标准库模块,去探索一些在linux系统通过proc和sysfs文件系统使之访问信息成为可能。注意的是通过文件系统来访问信息将会在不同的硬件架构有所不同。所以在读本文或是写脚本时要时刻记住可以试图从这些文件获取信息。