如何检测Ubuntu版本?

2024-03-18

我目前正在编写一个Python应用程序来更改一些网络配置文件。该应用程序需要在 Ubuntu 10.04 至 13.10 上运行。问题是,NetworkManager 在不同版本上以不同的方式被破坏(尽管他们似乎最终在 13.04+ 中修复了它),这导致与我的应用程序不兼容。

我已经找出了每个版本的问题并为它们开发了解决方法,我只是不确定检测用户正在运行的 Ubuntu 版本的最佳方法是什么。

到目前为止我想出的最好的解决方案是解析lsb_release -a,但这似乎是一个相当脆弱的解决方案,对于 Ubuntu 派生的发行版(例如 Mint)甚至可能会失败,甚至可能会失败于一些“官方”变体(Kubuntu、Xubuntu 等)。

有没有好的方法可以检测base给定 Linux 发行版的发行版和版本,以便我可以根据该版本做出我的应用程序的选择?


为了简化代码,您可以做的一件事就是实际了解一件事:lsb_release被写。它实际上是用 python 编写的。

所以我们可以将大部分代码简化为:

>>> import lsb_release
>>> lsb_release.get_lsb_information()
{'RELEASE': '10.04', 'CODENAME': 'lucid', 'ID': 'Ubuntu', 'DESCRIPTION': 'Ubuntu 10.04.4 LTS'}

这不一定对所有子 ubuntu 发行版都有帮助,但我不知道有任何内置表可以为您做到这一点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何检测Ubuntu版本? 的相关文章

  • Django i18n 和 python 语言环境(和日期)

    我一直在使用 Django 的 i18n 系统 它似乎大部分工作正常 然而 模型代码中的日期似乎引起了问题 我使用 datetime strftime 填充一些 CHOICES 元组 然后在表单中使用它们 据我了解 django 会将语言环
  • x86-64 Linux 中不再允许使用 32 位绝对地址?

    64 位 Linux 默认使用小内存模型 将所有代码和静态数据置于 2GB 地址限制以下 这确保您可以使用 32 位绝对地址 旧版本的 gcc 对静态数组使用 32 位绝对地址 以便节省相对地址计算的额外指令 然而 这不再有效 如果我尝试在
  • Python:在 Plotly 中的图形上方创建注释空间

    我想在图中创建额外的注释空间 请参阅附图中的绿色区域 目前 y 轴定义了绘图的高度 我可以将绘图推到超出 y max 限制 在某个点 在图像中标记为红色 之后隐藏 y 轴吗 我尝试避免轴到达 评论部分 绿色 谢谢你 在此输入图像描述 htt
  • Python中定义类变量时如何引用类方法?

    我有以下类和类变量 class MyClass class var 1 a class var 2 run class method classmethod def run class method cls return ran class
  • Python 上的 io.open() 和 os.open() 有什么区别?

    我意识到open 我一直在使用的函数是一个别名io open 以及导入 from os会掩盖这一点 通过以下方式打开文件有什么区别io模块和os module io open 是文件 I O 的首选高级接口 它将操作系统级文件描述符包装在一
  • numpy:gzip 压缩文件的 fromfile

    我在用numpy fromfile构造一个数组 我可以将其传递给pandas DataFrame构造函数 import numpy as np import pandas as pd def read best file file kwar
  • 如何使用 Apache Beam 从 Google Pub/Sub 访问消息 ID?

    我一直在 Python 2 7 16 上使用 2 13 0 SDK 测试 Apache Beam 以流模式从 Google Pub Sub 订阅中提取简单消息 并写入 Google Big Query 表 作为此操作的一部分 我尝试使用 P
  • 使用 PIL 对图像进行着色,同时保持透明度?

    好吧 情况是这样的 我想使用 Python 图像库来 主题化 图像 如下所示 Theme color 33B5E5 IN OUT 我使用 ImageMagick 命令得到了结果 convert image png colorspace gr
  • 如何在命名管道 (mkfifo) 上执行非阻塞 fopen?

    如果我有一个程序使用 mkfifo 创建并尝试打开命名管道 如何在不阻塞的情况下打开管道进行读取或写入 具体来说 我正在编写一个 C 程序 它可以在有或没有 GUI 的情况下运行 用 Java 编写 在 C 程序中 我使用 mkfifo 成
  • 仅使用 NumPy einsum 处理上三角元素

    我使用 numpy einsum 来计算形状为 3 N 的列向量 pts 数组与其自身的点积 从而得到形状为 N N 的矩阵 dotps 与所有点积 这是我使用的代码 dotps np einsum ij ik gt jk pts pts
  • 长异常链的优雅替代方案? [复制]

    这个问题在这里已经有答案了 很多时候我发现自己写的东西看起来像这样 try procedure a except WrongProcedureError try procedure b except WrongProcedureError
  • 如何安装我的自定义 Python 包及其自定义依赖项?

    我想找到一种方法来安装我自己的 python 包 该包依赖于其他自定义 python 包 我按照本指南创建了我自己的 python 包 https python packaging readthedocs iao en latest htt
  • 从该共享库中查找加载的共享库的位置?

    从共享库中的函数 在正在运行的进程 用 C 编写 内 我如何发现该共享库是从哪里加载的 我找到的所有答案都涉及使用诸如ldd在命令行中 或者通过查看 proc self maps 在 Win32 上 我只需使用GetModuleFileNa
  • 如何在plotly dash应用程序中编写数学符号?

    我想在绘图破折号应用程序中绘制数学符号 例如 我尝试过这个 import dash import dash html components as html app dash Dash name app layout html Div chi
  • 在 R 4.0.2 中安装 rsvg 库 (conda-forge)

    我在下载 r 包时遇到困难rsvg 我首先使用 conda 为最新的 R 版本 4 0 2 创建了一个环境 如下所示指示 https anaconda org conda forge r base 我能够毫无问题地下载许多其他 R 包和生物
  • 使用日期作为窗口函数实现 RANGE

    从 SQLAlchemy 1 4 25 开始 没有内置支持 所以我尝试使用该解决方案here https stackoverflow com a 69606048 11277108 这是我的复制 from datetime import d
  • Gnu 时间和格式化输出

    我想使用 gnu time 来测量一些小 c 程序的运行时间 人 中写道 f FORMAT format FORMAT Use FORMAT as the format string that controls the output of
  • 如何像 urllib 这样的模拟/存根 python 模块

    我需要测试一个需要使用 urllib urlopen 它也使用 urllib urlencode 查询外部服务器上的页面的函数 服务器可能宕机 页面可能发生变化 我不能依赖它进行测试 控制 urllib urlopen 返回内容的最佳方法是
  • Python 3 Tkinter 菜单小部件的回调似乎不按顺序

    我在使用 Tkinter 时遇到问题Menu小部件 没有菜单按钮 因此回调似乎不按顺序运行 这里有一个very最小的例子 Python 3 6 5 Windows 7 x64 from tkinter import root Tk popu
  • 多重继承并使用基类之一的方法

    我有以下代码 class A object def init self self name A super A self init def Update self print Update A self PickTarget def Pic

随机推荐

  • 如何在javascript中计算LaTeX公式?

    我有 LaTeX 格式的 JavaScript 字符串 例如 frac y 2 2 x frac 2 sqrt y 2 x y 2 我希望能够用定义的变量来评估它 有谁知道用于此目的的框架或库 我尝试在谷歌和堆栈中找到它 但没有成功 如果您
  • AttributeError:“模块”对象没有属性“newperson”

    我目前正在学习 python 编程 并且是初学者 目前我陷入了文件练习 所以这些是我需要做的设定事情 而不是做我想做的任何事情 不幸的是 这也意味着我可能无法做任何复杂的 对我来说 快捷方式 目前使用Python 3 2 2 我需要两个不同
  • Javascript ES6 中注册表符号 (Symbol.for) 的用途是什么?

    有这样一件事registryJS ES6 中的符号 发现在这篇 Mozilla 文章中 https hacks mozilla org 2015 06 es6 in depth symbols 它不同于Symbol Stack Overfl
  • Xcode 4 中的 openssl 库

    正如标题所示 我正在努力将 openssl 库包含在我的 xcode iOs 项目中 例如 include
  • 如何在 CMake 中将多个库目标分组为一个

    我正在尝试将多个目标分组为一个目标 以便下游用户只需要链接到该单个目标 下游用户不需要查找所有目标 并且上游库中的所有功能都可以通过链接到该目标来使用 请参阅下面我失败的尝试的 CMakeLists cmake minimum requir
  • Hovertemplate 在绘图中与 add_trace() 一起使用时显示数据两次

    我使用以下方法创建了分组条形图plotly 问题是在我的hovertemplate为了追踪我得到一个白色的盒子LA ZOO这似乎是不必要的 我想摆脱它 Animals lt c giraffes orangutans monkeys SF
  • MSDeploy 是否足够“友好”,或者可以将其封装在 MSI 文件中

    您认为 MSDeploy 包是让最终用户在其系统上安装 Web 应用程序的一个不错的选择吗 与使用 MSI 文件安装 Web 应用程序的体验相比如何 有人尝试过将 MSDeploy 包封装在 MSI 包中吗 会起作用吗 据我描述 MSDep
  • JavaFX 中加载器实例化抛出空指针

    我已经声明了两个 fxml 文件 并为每个文件声明了一个控制器 根布局控制器是一个控制器根布局 fxml and 概览控制器是一个控制器概述 fxml rootlayout 有带有文件打开项的菜单栏 overviewcontroller 有
  • Visual C++ 2012 cout 在运行时崩溃

    我今天决定尝试一下 Visual Studio 2012 Express 首先要做的就是写 Hello world 但是 我无法使其工作 我创建了一个 Windows 控制台应用程序项目 编写了标准代码 但导致了运行时错误 这是我的代码 i
  • Azure 上的 React + Express:无效的主机标头

    错误 当部署到具有多容器支持的 Azure Web Apps 时 我收到 无效的主机标头 消息来自https mysite azurewebsites com https mysite azurewebsites com 本地设置 这运行良
  • 无法在 Jenkins 上找到 TFS 插件 [重复]

    这个问题在这里已经有答案了 无法找到适用于 Jenkins 的 TFVC 或 Azure DevOps 和 Team Foundation Server 插件 詹金斯版本 2 263 1 由于安全漏洞 TFS 插件的官方分发已暂停 在 Je
  • 空值 - 布尔表达式

    所以我有一个关于考试作业的问题 在这个作业中我们有一堆布尔表达式 例如 FALSE OR NULL NULL 然后我们需要写出布尔表达式的值 为此 我使用了三值逻辑 但是当您获得如下布尔表达式时 它如何应用 NULLL AND TRUE O
  • 如何使用 sql 查询将数据库的子集提取到 dbunit 文件中?

    Why 我有一个很大的 Oracle 表 我想测试一些 DAO 方法 为此 我使用 dbunit Problem 我想使用 sql 查询将现有数据库的子集提取为 dbunit 平面 xml 文件 查询示例 Select t1 field1
  • spring任意消息传递tcp套接字

    我正在使用 spring integration 开发定制的双向 TCP 套接字服务器 服务器将处理请求 响应任务 但我无法向特定的连接 ID 发送任意消息 我也知道也许使用TcpSendingMessageHandler and TcpR
  • 如何在Python Flask中定位项目的for循环

    所以 我在烧瓶中有一个项目的 for 循环 我正在尝试找到一种方法将它们放置在页面上 我在引导卡中有一个任务的 for 循环 当用户创建卡片时 卡片变得非常愚蠢 并且定位变得非常奇怪 截图 https ibb co hRjCrFf 老师作业
  • 如何使用 GitHub API 确定提交属于哪个 Pull Request?

    给定提交 SHA 我想使用 GitHub API 来确定它属于哪个拉取请求 GitHub 在上显示此信息提交页面 https github com hammerlab pileup js commit ee49f07dba3821109b3
  • 获取MySQL语句的精确执行时间

    现在的结果表明 集合中的 X 行 0 00 秒 所以我想知道是否有办法可以得到小数点后两位以上的时间 Execute set profiling 1在运行语句之前 然后获取计时show profiles query See 显示配置文件语法
  • Powershell 匹配属性,然后有选择地组合对象以创建第三个

    我对此有一个解决方案 但我相信这不是最好的方法 因为它需要永远 所以我正在寻找更快 更好 更智能的方法 我有多个从 csv 文件中提取的 pscustomObject 对象 每个对象至少有一个共同属性 一个相对较小 对象中大约 200 30
  • 为什么 keras 使用“call”而不是 __call__?

    我喜欢以下代码 https www tensorflow org tutorials eager custom layers https www tensorflow org tutorials eager custom layers cl
  • 如何检测Ubuntu版本?

    我目前正在编写一个Python应用程序来更改一些网络配置文件 该应用程序需要在 Ubuntu 10 04 至 13 10 上运行 问题是 NetworkManager 在不同版本上以不同的方式被破坏 尽管他们似乎最终在 13 04 中修复了