Search code examples
pythondjangodictionarypsutil

Creating Process Dictionary


My Goal: I need to create a function that retrieves the PID and Name of each process and returns them in a dictionary. I will be uploading this to Django and really need two different dictionaries. 1 with every running process name and PID and another with all installed names and PIDs. So far I can get it to print the dictionary well but not return correctly. Maybe I am calling it wrong. I am newer to this.

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

If you were to sub "return" for print the dict will print fine. How to I call that dict from here? Is it even returning correctly??


Solution

  • You are returning only the first result because your return statement is inside the for block. Since you can't create a dictionary with duplicate keys, you should return a list of dictionaries instead. Try a list comprehension to return all the processes:

    import psutil
    
    def pid_name():
        return [proc.as_dict(attrs=['pid', 'name']) for proc in psutil.process_iter()]
    

    Update:

    If you are trying to create a dictionary with pids as keys and names as values, it's even easier:

    def pid_name():
        return {proc.pid: proc.name() for proc in psutil.process_iter()}