我正在尝试创建一个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发行版中返回相同的内容。这有什么例外吗?
答案 0 :(得分:1)
首先,consulting the code,platform.system
包裹os.uname
。后来为* nix的后者,是uname
命令调用。 wiki中提供了一些可能的值。
其次,linux_distribution
roughly speaking,head /etc/file
其中file
是第一个以release
或version
结尾的文件。也就是说,对于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
内容时会出现已知问题。