获取服务器内存占用详情-各程序占用情况

1. 通过在终端执行tasklist命令获取任务信息

def get_task_info():
    # 1. 通过在终端执行tasklist命令获取任务信息
    task_list_str = os.popen('tasklist').read()
    task_list = task_list_str.split('\n')
    return task_list

2. 通过获取到的信息的第4个元素(==========)长度用来分隔数据,获取开始和结束位置

def get_starts_ends(task_list):
    # 2. 通过获取到的信息的第4个元素(==========)长度用来分隔数据,获取开始和结束位置
    starts = []
    ends = []
    start = 0
    for i in task_list[3].split(' '):
        starts.append(start)
        end = len(i) + start
        ends.append(end)
        start = end + 1
    return starts, ends

后来在执行的过程中发现不一定是第4个元素,所以这部分做以下更新:读取每一行判断其是否已==开始。

def get_starts_ends(task_list):
    # 2. 通过获取到的信息的第x个元素(==========)长度用来分隔数据,获取开始和结束位置
    starts = []
    ends = []
    start = 0
    def table_col(task_list):
        for col_ in task_list:
            if col_.startswith('=='):
                return col_
    col_length = table_col(task_list)
    for i in col_length.split(' '):
        starts.append(start)
        end = len(i) + start
        ends.append(end)
        start = end + 1
    return starts, ends

3. 解析单行taskstr

def tran_taskline(taskstr, cols, starts, ends):
    # 3. 解析单行taskstr
    data = {
     }
    for col, s, e in zip(cols, starts, ends):
        data[col] = taskstr[s:e].strip()
    return data

4. 通过循环解析taskstr

def mem_detail_info():
    # 4. 通过循环解析taskstr
    task_list = get_task_info()
    starts, ends = get_starts_ends(task_list)
    cols = ['image_name', 'pid', 'session_name', 'session', 'mem_usage']
    # 通过循环解析所有任务
    df = pd.DataFrame()
    for taskstr in task_list[4:-1]:
        tmp = pd.DataFrame([tran_taskline(taskstr, cols, starts, ends)])
        df = df.append(tmp)
    df['mem_usage'] = df['mem_usage'].map(lambda x: int(str(x).replace(',', '').strip('K')))
    df = df.sort_values(by='mem_usage', ascending=False)

你可能感兴趣的:(Python相关,python,编程语言)