我很少使用Python代码执行Linux命令。请参考下面的代码和输出。
import os
uptime_from_top_command = "top -c -b -n1 | head -1 | cut -d ' ' -f 4-6 | sed -e 's/,//'"
uptime = os.system(uptime_from_top_command)
load_average_from_top_command = "top -c -b -n1 | head -1 | cut -d ',' -f 4-6 | sed -e 's/^[ \t]*//'"
load_average = os.system(load_average_from_top_command)我得到了下面的输出。
up 100 days
load average: 0.06, 0.04, 0.00我需要将此输出转换为以下JSON格式,并将其存储在JSON文件中。
{
"uptime": "100 days",
"load average": {
"1_min": "0.06",
"5_mins": "0.04",
"15_mins": "0.00"
}
}注意-如果服务器的正常运行时间少于1天,那么它将显示为up 12:45(例如)。在这种情况下,应该以下面的格式将其转换为JSON文件。
{
"uptime": "12:45",
"load average": {
"1_min": "0.06",
"5_mins": "0.04",
"15_mins": "0.00"
}
}我是说,它应该接受这两种格式。
有人能帮我实现这个目标吗?
发布于 2022-09-09 20:06:58
您可以尝试re模块来解析字符串输出。例如:
import re
s = """\
up 100 days
load average: 0.06, 0.04, 0.00"""
out = {
"uptime": re.search(r"up ([^\s]+(?: days?)?)", s).group(1),
"load average": dict(
zip(
("1_min", "5_mins", "15_mins"),
re.search(r"load average: ([^\s]+) ([^\s]+) ([^\s]+)", s).groups(),
)
),
}
print(out)指纹:
{
"uptime": "100 days",
"load average": {"1_min": "0.06,", "5_mins": "0.04,", "15_mins": "0.00"},
}编辑:将数据保存在Json文件中:
import re
import json
s = """\
up 100 days
load average: 0.06, 0.04, 0.00"""
out = {
"uptime": re.search(r"up ([^\s]+(?: days?)?)", s).group(1),
"load average": dict(
zip(
("1_min", "5_mins", "15_mins"),
re.search(r"load average: ([^\s]+) ([^\s]+) ([^\s]+)", s).groups(),
)
),
}
with open("data.json", "w") as f_out:
json.dump(out, f_out, indent=4)将数据保存到data.json
{
"uptime": "100 days",
"load average": {
"1_min": "0.06,",
"5_mins": "0.04,",
"15_mins": "0.00"
}
}https://stackoverflow.com/questions/73666845
复制相似问题