Pergunta

Isso funciona perfeitamente:

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

Isso não:

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

Isso gera um erro:Acesso negado:(PID = 560) Estou em um ambiente do Windows e preciso acessar todos os nomes dos processos.Já tenho um código funcionando (o primeiro), então minha dúvida é mais por curiosidade.

O que o try/except declarações funcionam no primeiro exemplo, e por que não funciona se eu removê-las no segundo?

Foi útil?

Solução

Nem todas as informações de cada processo estarão disponíveis para você, a menos que você seja o usuário/administrador root.Veja esta pergunta: python psutil no windows dá acesso negado.

Seria melhor alterar seu primeiro exemplo para capturar especificamente esses casos, com:

try:    
    if str(psutil.Process(pid).name()) == name:      
        return True    
except AccessDenied:    
    print "Unable to access PID:",pid
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top