我目前正在编写一个Python应用程序,可以更改一些网络配置文件。该应用程序需要在Ubuntu 10.04到13.10上运行。问题是,NetworkManager在不同版本上以不同的方式损坏(尽管他们似乎最终在13.04+中修复了它),这导致与我的应用程序不兼容。
我已经找出了每个版本上的问题,并为它们开发了解决方案,我只是不确定检测用户运行的Ubuntu版本的最佳方法是什么。
到目前为止,我提出的最好的解决方案是解析lsb_release -a
的输出,但这似乎是一个相当脆弱的解决方案,并且可能会在Ubuntu派生的发行版(如Mint)中失败,甚至可能在一些“官方”变体(Kubuntu,Xubuntu等)中失败。
是否有一种好方法来检测给定Linux发行版的 base 发行版和版本,以便我可以根据该版本来选择我的应用?
5条答案
按热度按时间nwo49xxi1#
你可以做的一件事就是简化你的代码,那就是了解
lsb_release
是怎么写的,它实际上是用python写的。因此,我们可以将您的大部分代码缩减为:
字符串
这并不一定对所有的ubuntu发行版都有帮助,但我不知道有任何内置的表可以为你做这件事。
c9qzyr3d2#
最好的选择是使用操作系统和平台库。
字符串
平台库应该是更有用的。
编辑:Rob对这篇文章的评论也强调了更具体的平台。
eit6fx6z3#
您也可以阅读:/etc/lsb-release或/etc/debian_version作为文本文件
我使用gentoo系统,对我来说:
字符串
hgtggwj04#
字符串
zengzsys5#
Python v3.10+解决方案
上面的解决方案对我来说都不起作用,也不太黑客。幸运的是,标准库的
platform
模块作为一个名为freedesktop_os_release()
的函数非常方便!你可以在官方文档中阅读更多关于它的信息:platform.freedesktop_os_release()
下面是一个简单的例子,我最近需要在Python脚本中获取Ubuntu/Debian系统的版本代码:
字符串
它的Bash等效代码应该是这样的:
型