【问题标题】:Extract uptime value from bash command (RaspberryPi)从 bash 命令(RaspberryPi)中提取正常运行时间值
【发布时间】:2016-03-24 16:36:02
【问题描述】:

当我使用uptime 时,例如

17:16:49 up 3:29, 3 users, load average: 0.00, 0.02, 0.05

我的脚本只需要3.29 部分.... 请记住,从该字符串中准确获取该部分的最佳,最简单的方法是什么,该值将更改为:

22:59:49 up 109:32, 7 users, load average: 0.10, 0.02, 0.05

例如,我尝试过拆分:

def getUPTime():
uptime = os.popen('uptime').readline()
uptime1 = uptime.split("up  ")[0]
up = uptime1.rsplit(",")[3]
return up

但我收到一个错误 list index out of range..... 即使它可以工作,如果在 pi 启动期间任何输出发生变化,我认为这不是一个好的解决方案

我正在考虑replace 选项可能与regex 一起使用

【问题讨论】:

标签: regex string python-3.x split raspberry-pi


【解决方案1】:

正如@Alastair McCormackhis comment 中建议的那样,uptime 可能是最好的解决方案。

但是,您可以使用 [ ,] 正则表达式和 re.split 以空格和逗号分隔字符串,然后从结果数组中获取第三个元素:

Demo:

import re
s = "17:16:49 up  3:29,  3 users,  load average: 0.00, 0.02, 0.05"
print(re.split(r"[ ,]+", s)[2])

您的代码将如下所示:

import re
#...
def getUPTime():
    uptime = os.popen('uptime').readline()
    chunks = re.split(r"[ ,]+", uptime) 
    uptime1 = chunks[0]
    up = chunks[2]
    return up

备选方案 1:

获取第三个单词直到,

^(?:\S+\s+){2}(\S+),

Python:

import re
p = re.compile(r'^(?:\S+\s+){2}(\S+),')
uptime = "22:59:49 up  109:32,  7 users,  load average: 0.10, 0.02, 0.05"
m = p.search(uptime)
if m:
    print(m.group(1))

regex demo

备选方案 2

匹配并捕获您需要的内容,只需匹配您需要删除的内容并将re.sub 与:

(?s)^.*?\s(\d+:\d+).*

请参阅regex demoPython demo

import re
p = re.compile(r'(?s)^.*?\s(\d+:\d+).*')
uptime = "22:59:49 up  109:32,  7 users,  load average: 0.10, 0.02, 0.05"
print(p.sub(r"\1", uptime))

【讨论】:

    【解决方案2】:

    您可以在.replace() 中尝试以下正则表达式,该值将存储在第一个(也是唯一一个)捕获组中:

    \d+:\d+:\d+\s*up\s*(\d+:\d+),
    

    Live Demo on RegExr


    这是您可以使用的完整代码:

    import re
    def getUPTime():
        uptime = os.popen('uptime').readline()
        uptime = re.search('\d+:\d+:\d+\s*up\s*(\d+:\d+),', uptime)
        return uptime.group(1)
    

    【讨论】:

    • 谢谢您能否详细说明一下……类似的东西? return(up.replace("\d+:\d+:\d+\s*up\s*(\d+:\d+),","")) ?
    • @PeterS 我用你可以使用的完整代码更新了答案
    • 非常感谢。那行得通。我将使用 python uptime 但非常感谢您花时间向我展示 REGEX 版本
    猜你喜欢
    • 1970-01-01
    • 2016-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-02
    相关资源
    最近更新 更多