Модуль psutil Python и странная проблема
Вопрос
Это работает идеально:
def find_processes():
name = "ProcessName.exe"
pid_list = psutil.get_pid_list()
for pid in pid_list:
try:
if str(psutil.Process(pid).name()) == name:
return True
except:
pass
return False
Это не значит:
def find_processes():
name = "ProcessName.exe"
pid_list = psutil.get_pid_list()
for pid in pid_list:
if str(psutil.Process(pid).name()) == name:
return True
return False
Это приводит к ошибке:Доступ запрещен:(pid= 560) Я работаю в среде Windows, и мне нужен доступ ко всем именам процессов.У меня уже есть рабочий код (первый), так что мой вопрос скорее из любопытства.
Что делают try
/except
инструкции выполняются в первом примере, и почему это не работает, если я удаляю их во втором?
Решение
Не вся информация из каждого процесса будет доступна вам, если вы не являетесь пользователем root / администратором.Смотрите этот вопрос: python psutil в Windows дает отказ в доступе.
Вам было бы лучше изменить свой первый пример, чтобы конкретно уловить эти случаи, с:
try:
if str(psutil.Process(pid).name()) == name:
return True
except AccessDenied:
print "Unable to access PID:",pid
Не связан с StackOverflow