How would I use Python to determine what programs are currently running. I am on Windows.
-
3Hey! Welcome to StackOverflow! It would be very helpful if you've posted things that you've tried but haven't worked for you. This lets people answering questions know what you're having problems with. Good Luck with your Question!Tyler Carter– Tyler Carter2010-08-07 05:37:22 +00:00Commented Aug 7, 2010 at 5:37
4 Answers
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!
1 Comment
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")
2 Comments
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"