Frage

Das funktioniert perfekt:

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

Dies bedeutet nicht:

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

Es wird ein Fehler ausgegeben:Zugriff abgelehnt:(PID = 560) Ich bin in einer Windows -Umgebung und muss auf alle Namen der Prozesse zugreifen.Ich habe bereits einen funktionierenden Code (den ersteren), daher ist meine Frage eher aus Neugier.

Was machen die try/except Anweisungen funktionieren im ersten Beispiel, und warum funktioniert es nicht, wenn ich sie im zweiten entferne?

War es hilfreich?

Lösung

Nicht alle Informationen aus jedem Prozess stehen Ihnen zur Verfügung, es sei denn, Sie sind der Root-Benutzer/Administrator.Siehe diese Frage: Python psutil unter Windows verweigert den Zugriff.

Sie sollten Ihr erstes Beispiel besser ändern, um diese Fälle gezielt zu erfassen, und zwar mit:

try:    
    if str(psutil.Process(pid).name()) == name:      
        return True    
except AccessDenied:    
    print "Unable to access PID:",pid
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top