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)