Страницы

Поиск по вопросам

воскресенье, 9 февраля 2020 г.

Как вывести только нужные параметры через subprocess Popen

#python #windows


Если использовать этот код, то выводятся все процессы на компьютере, но мне надо
не всё знать об этих процессах, а только id и сколько памяти они занимают. Я никак
найти не смог как это сделать не используя библиотеку psutil.

    import os
    from subprocess import Popen, PIPE, check_output
    print(*[line.decode('cp866', 'ignore') 
    for line in Popen('tasklist', stdout=PIPE).stdout().readlines()])

    


Ответы

Ответ 1



Используем только встроенные модули: import io import csv from subprocess import check_output fh = io.StringIO(check_output(["tasklist", "/fo", "csv"]).decode('cp866', 'ignore')) reader = csv.DictReader(fh, delimiter=",") for row in reader: print(row["PID"], row["Mem Usage"])

Ответ 2



Можно воспользоваться модулем Pandas: import io import os import pandas as pd # pip install pandas / conda install pandas from subprocess import check_output df = pd.read_csv(io.StringIO(check_output(["tasklist", "/fo", "csv"]).decode('cp866', 'ignore'))) Результат: In [17]: df Out[17]: Image Name PID Session Name Session# Mem Usage 0 System Idle Process 0 Services 0 8 K 1 System 4 Services 0 4.548 K 2 Registry 324 Services 0 86.904 K 3 smss.exe 932 Services 0 616 K 4 csrss.exe 992 Services 0 5.352 K 5 wininit.exe 1112 Services 0 6.772 K 6 services.exe 1328 Services 0 10.520 K .. ... ... ... ... ... 227 RuntimeBroker.exe 1128 Console 5 31.268 K 228 svchost.exe 11636 Services 0 16.820 K 229 RuntimeBroker.exe 12296 Console 5 13.088 K 230 svchost.exe 5004 Services 0 25.812 K 231 backgroundTaskHost.exe 9712 Console 5 12.448 K 232 RuntimeBroker.exe 19256 Console 5 8.248 K 233 tasklist.exe 19468 Console 5 7.928 K [234 rows x 5 columns] Выбираем нужные столбцы: In [18]: df[["PID", "Mem Usage"]] Out[18]: PID Mem Usage 0 0 8 K 1 4 4.548 K 2 324 86.904 K 3 932 616 K 4 992 5.352 K 5 1112 6.772 K 6 1328 10.520 K .. ... ... 227 1128 31.268 K 228 11636 16.820 K 229 12296 13.088 K 230 5004 25.812 K 231 9712 12.448 K 232 19256 8.248 K 233 19468 7.928 K [234 rows x 2 columns] или сразу читаем только нужные столбцы: In [19]: cols = ["PID", "Mem Usage"] In [20]: df = (pd.read_csv(io.StringIO(check_output(["tasklist", "/fo", "csv"]) .decode('cp866', 'ignore')), usecols=cols)) In [21]: df Out[21]: PID Mem Usage 0 0 8 K 1 4 4.708 K 2 324 83.284 K 3 932 616 K 4 992 5.348 K 5 1112 6.772 K 6 1328 10.424 K .. ... ... 222 1128 19.400 K 223 11636 16.856 K 224 12296 11.324 K 225 7664 8.144 K 226 2388 73.392 K 227 20776 13.364 K 228 17908 7.916 K [229 rows x 2 columns]

Комментариев нет:

Отправить комментарий