platform.system和platform.linux_distribution准确输出了什么?

时间:2013-11-22 13:12:19

标签: python linux

我正在尝试创建一个python脚本,以便在linux机器中自动安装和配置某些程序。

我的想法是使用平台和多处理库来询问系统信息(platform.system,platform.linux_distribution,multiprocessing.cpu_count等),然后安装软件并为软件配置创建一个文本文件,具体取决于这些电话我得到了什么。

我在确定操作系统和发行版时遇到问题:我需要知道脚本运行的是什么Linux发行版,所以我可以启动相应的命令,而我正在寻找的信息不在python文档中。

根据该文件(http://docs.python.org/2/library/platform.html), platform.system

  

返回系统/操作系统名称,例如'Linux','Windows'或'Java'。如果无法确定值,则返回空字符串。

和platform.linux_distribution

  

尝试确定Linux OS分发名称的名称。

     

(...)

     

返回一个元组(distname,version,id),它默认为作为参数给出的args。 id是版本号后括号中的项目。它通常是代号。

但它不够具体,也没有提到任何特殊情况。

我在我的机器上尝试过这些变量(platform.system返回'Linux'和platform.linux_distribution'debian'),但我无法在其他系统中尝试它(我认为创建它是不可行的)每个Linux发行版的虚拟机都在那里发布并在每个版本中进行尝试)

我需要准确知道distname字符串platform.linux_distribution在不同的Linux发行版中输出的内容,以便我可以在我的脚本中使用这些值。

我还需要确认platform.system是否在每个linux发行版中返回相同的内容。这有什么例外吗?

1 个答案:

答案 0 :(得分:1)

首先,consulting the codeplatform.system包裹os.uname。后来为* nix的后者,是uname命令调用。 wiki中提供了一些可能的值。

其次,linux_distribution roughly speakinghead /etc/file其中file是第一个以releaseversion结尾的文件。也就是说,对于debian / ubuntu,例如head /etc/debian_version。它会分割出结果行,并在发现元组时返回。

我可以访问的基于Linux平台的linux_distribution输出的一些示例:

$ python -c 'import platform; print platform.linux_distribution()'
('debian', 'squeeze/sid', '')
('debian', 'wheezy/sid', '')
('SUSE Linux Enterprise Server ', '11', 'x86_64')
('Red Hat Enterprise Linux Server', '5.9', 'Tikanga')
('Red Hat Enterprise Linux Server', '6.4', 'Santiago')

我认为你可以在这里获得模式。我个人不会依赖linux_distribution,例如,升级后可能会损坏/etc/debian_version内容时会出现已知问题。