Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Determining running programs in Python

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

like image 712
asdsaaa Avatar asked Aug 07 '10 05:08

asdsaaa


3 Answers

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
like image 147
Nick Perkins Avatar answered Sep 23 '22 15:09

Nick Perkins


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!

like image 42
hb2pencil Avatar answered Sep 25 '22 15:09

hb2pencil


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")
like image 39
trevorKirkby Avatar answered Sep 24 '22 15:09

trevorKirkby