Mój cel: Muszę utworzyć funkcję, która pobierze PID i nazwę każdego procesu i zwróci je w słowniku. Będę przesyłał to do Django i naprawdę potrzebuję dwóch różnych słowników. 1 z każdą uruchomioną nazwą procesu i PID, a drugi ze wszystkimi zainstalowanymi nazwami i PID. Do tej pory mogę go dobrze wydrukować, ale nie zwraca poprawnie. Może nazywam to źle. Jestem od tego nowszy.
import psutil
def pid_name():
for proc in psutil.process_iter():
try:
pinfo = proc.as_dict(attrs=["pid", "name"])
except psutil.NoSuchProcess:
pass
else:
return pinfo
Jeśli chcesz napisać „wróć” do drukowania, dykt wydrukuje się dobrze. Jak mogę stąd nazwać ten dykt? Czy to wróci poprawnie?
Odpowiedzi:
1 dla odpowiedzi № 1Zwracany jest tylko pierwszy wynik, ponieważ instrukcja return znajduje się w for
blok. Ponieważ nie możesz utworzyć słownika ze zduplikowanymi kluczami, powinieneś zamiast tego zwrócić listę słowników. Spróbuj zrozumieć listę, aby zwrócić wszystkie procesy:
import psutil
def pid_name():
return [proc.as_dict(attrs=["pid", "name"]) for proc in psutil.process_iter()]
Aktualizacja:
Jeśli próbujesz utworzyć słownik za pomocą pid
s jako klucze i name
jako wartości, jest jeszcze łatwiej:
def pid_name():
return {proc.pid: proc.name() for proc in psutil.process_iter()}