Pythons psutil-Modul und ein bizarres Problem
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?
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