Приведенные ниже примеры кодов извлекают все запущенные процессы и распечатывают их. Они написаны на основе третьего примера здесь и последнего из здесь. Проблема в том, что я не могу понять, почему только первый извлекает процесс, отсортированный по желанию.
Я думаю, что это связано с конструкцией функции lambda
. Но правильно работающий образец, первый, похоже, смешивает локальную переменную p
оператора for со словарем p.dict
, что заставляет меня застрять.
Первый образец:
import psutil
procs = []
for p in psutil.process_iter():
try:
p.dict = p.as_dict(['pid', 'name'])
except psutil.NoSuchProcess:
pass
else:
procs.append(p)
processes = sorted(procs, key=lambda p: p.dict['name'], reverse=False)
print(processes)
Второй образец:
import psutil
procs = []
for proc in psutil.process_iter():
try:
procs_dic = proc.as_dict(['pid', 'name'])
except psutil.NoSuchProcess:
pass
else:
procs.append(proc)
processes = sorted(procs, key=lambda ordem: procs_dic['name'], reverse=False)
print(processes)