当前位置:首页 > 运维 > 正文内容

Python3 Linux发行版读取系统版本

MuWind1个月前 (04-04)运维17

开发机环境切换到openEuler,测试了一下宝塔的功能,除了因为发行版问题基本上mysql,nginx,php的安装都需要编译安装以外。其实就没什么问题了,甚至连docker都是正常的

但是系统版本的显示是有问题的,很令人难受。

image.png

通过f12,一步步推导出处理这部分的代码在/www/server/panel/class/public.py文件中

查看源代码,宝塔这里的检测看得出来是改了好几版了……太多的if else嵌套了

def get_os_version():
    '''
        @name 取操作系统版本
        @author hwliang<2021-08-07>
        @return string
    '''
    p_file = '/etc/.productinfo'
    if os.path.exists(p_file):
        s_tmp = readFile(p_file).split("\n")
        if s_tmp[0].find('Kylin') != -1 and len(s_tmp) > 1:
            version = s_tmp[0] + ' ' + s_tmp[1].split('/')[0].strip()
    else:
        version = readFile('/etc/redhat-release')
    if not version:
        version = readFile('/etc/issue').strip().split("\n")[0].replace('\\n','').replace('\l','').strip()
    else:
        version = version.replace('release ','').replace('Linux','').replace('(Core)','').strip()
    v_info = sys.version_info
    try:
        version = "{} {}(Py{}.{}.{})".format(version,os.uname().machine,v_info.major,v_info.minor,v_info.micro)
    except:
        version = "{} (Py{}.{}.{})".format(version,v_info.major,v_info.minor,v_info.micro)
    return xsssec(version)

通过阅读源代码,发现如果没有检测到/etc/.productinfo和/etc/redhat-release,就转用/etc/issue,但是openEuler这里的/etc/issue文件写的是:

[muwinds@localhost ~]$ cat /etc/issue

Authorized users only. All activities may be monitored and reported.

何况这种检测方法太过狭隘了。

发现宝塔在这个文件导入了os包,可以用os_popen的方法使用系统命令查看更为完整的/etc/os-release文件

[muwinds@localhost ~]$ cat /etc/os-release
NAME="openEuler"
VERSION="22.03 (LTS-SP3)"
ID="openEuler"
VERSION_ID="22.03"
PRETTY_NAME="openEuler 22.03 (LTS-SP3)"
ANSI_COLOR="0;31"

我们可以尝试取PRETTY_NAME所在的行数,通过得到的行数用sed命令取到数据,并去掉引号和PRETTY_NAME=这两个字符

试一下:

import os
fp = open("/etc/os-release","r")
f_body = fp.read()
find_prettyname = f_body.find('PRETTY_NAME')
line_prettyname = f_body[:find_prettyname].count('\n')+1
version =os.popen('sed -n {}p {}'.format(line_prettyname, '/etc/os-release')).read().replace('"','').replace('PRETTY_NAME=','')

image.png

效果显著

试着导入宝塔,如果不报错并且能正常显示说明没啥问题:

a51bf65843ffbba50d6fce6e8d3a95b4.png

没问题!

标签: openEulerPython

“Python3 Linux发行版读取系统版本” 的相关文章

centos分区挂载磁盘

centos分区挂载磁盘

准备建个nas服务,大容量的硬盘是必不可少的。去经理那拿了块4T的硬盘,以后有需要我再加吧。硬盘硬件上的安装很简单,插两根线拧螺丝就行了。接下来说的是挂到系统先查看一下盘子是不是安装上了:fdisk -l但凡眼睛没问题的 都能找到自己那块新装的盘:连着按一个N键和三个p键就行然后格式化:m...

在 CentOS 7 上搭建属于自己的邮件系统

在 CentOS 7 上搭建属于自己的邮件系统

跟朋友整了一堆活,总得要留下邮箱收集民意~由于项目的敏感性,我们需要一个属于自己的email服务器,于是便开始搭建了。所需工具:域名,可以PTR的公网IP机器,二级域名证书原理:先安装环境:yum -y install epel-release yum up...

完美永久破解最新Sublime Text 4 Build 4107 (Windows版)

完美永久破解最新Sublime Text 4 Build 4107 (Windows版)

1、下载并安装Sublime Text 4 Build 4107;官方下载地址:Windows 64位: https://download.sublimetext.com/sublime_text_build_4107_x64_setup.exe 2、 使用浏览器打开网站:https://hexed...

OpenWrt无法保存配置无法生效的解决方法

原因:意外断电导致硬盘卡在只读状态进入openwrt后台按回车输入下面命令,重新挂载即可:mount -o remount rw /...

支付系统下MySQL超时问题

现在跑的支付系统在处理客户问题查询订单的时候经常查询超时锁表,导致需要刷新网页。支付系统的在数据库的特性是高更新频率,当我在排查问题的时候看到了query cache,去google了一下:MySQL查询缓存是MySQL中比较独特的一个缓存区域,用来缓存特定Query的整个结果集信息,且共享给所有客...

数据科学基础-Python的一些注意事项

数据科学环境:Anaconda,这里用的是Python3.10,电脑没那么大空间的可用miniconda来代替常见数据类型数据类型DataType例子Example整数Integer(Int)100浮点数Floating Point Numbers(Float)3.1415926字符串Stringh...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。