使用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
选项
答案 0 :(得分:1)
您可以在.replace()
中尝试以下RegEx,该值将存储在第一个(也是唯一的)捕获组中:
\d+:\d+:\d+\s*up\s*(\d+:\d+),
以下是您可以使用的完整代码:
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)
答案 1 :(得分:1)
@Alastair McCormack在his comment中建议,uptime
可能是最佳解决方案。
但是,您可以将[ ,]
正则表达式与re.split
一起使用空格和逗号分隔字符串,然后从结果数组中获取第3个元素:
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+).*
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))