Determining running programs in Python

前端 未结 4 471
深忆病人
深忆病人 2020-11-30 08:48

How would I use Python to determine what programs are currently running. I am on Windows.

相关标签:
4条回答
  • 2020-11-30 09:14

    I was getting access denied with get_pid_list(). A newer method worked for me on windows and OSX:

    import psutil
    
    for proc in psutil.process_iter():
        try:
            if proc.name() == u"chrome.exe":
                print(proc)
                print proc.cmdline()
        except psutil.AccessDenied:
            print "Permission error or access denied on process"
    
    0 讨论(0)
  • 2020-11-30 09:16
    import os
    os.system('WMIC /OUTPUT:C:\ProcessList.txt PROCESS get Caption,Commandline,Processid')
    f = open("C:\ProcessList.txt")
    plist = f.readlines()
    f.close()
    

    Now plist contains a formatted whitespace-separated list of processes:

    • The first column is the name of the executable that is running
    • The second column is the command that represents the running process
    • The third column is the process ID

    This should be simple to parse with python. Note that the first row of data are labels for the columns, and not actual processes.

    Note that this method only works on windows!

    0 讨论(0)
  • 2020-11-30 09:17

    Thanks to @hb2pencil for the WMIC command! Here's how you can pipe the output without a file:

    import subprocess
    cmd = 'WMIC PROCESS get Caption,Commandline,Processid'
    proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
    for line in proc.stdout:
        print line
    
    0 讨论(0)
  • 2020-11-30 09:38

    Piping information from sub process commands is not ideal compared to an actual python tool meant for getting processes. Try the psutil module. To get a list of process numbers, do:

    psutil.get_pid_list()
    

    I'm afraid you have to download this module online, it is not included in python distributions, but this is a better way to solve your problem. To access the name of the process you have a number for, do:

    psutil.Process(<number>).name
    

    This should be what you are looking for. Also, here is a way to find if a specific process is running:

    def process_exists(name):
        i = psutil.get_pid_list()
        for a in i:
            try:
                if str(psutil.Process(a).name) == name:
                    return True
            except:
                pass
        return False
    

    This uses the name of the executable file, so for example, to find a powershell window, you would do this:

    process_exists("powershell.exe")
    
    0 讨论(0)
提交回复
热议问题