Вопрос

Это работает идеально:

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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top