确定Python中正在运行的程序

确定Python中正在运行的程序,python,windows,process,Python,Windows,Process,如何使用Python确定当前正在运行的程序。我在窗户上 import os os.system('WMIC /OUTPUT:C:\ProcessList.txt PROCESS get Caption,Commandline,Processid') f = open("C:\ProcessList.txt") plist = f.readlines() f.close() 现在,plist包含一个格式化的、以空格分隔的进程列表: 第一列是正在运行的可执行文件的名称 第二列是表示正在运行的进程

如何使用Python确定当前正在运行的程序。我在窗户上

import os
os.system('WMIC /OUTPUT:C:\ProcessList.txt PROCESS get Caption,Commandline,Processid')
f = open("C:\ProcessList.txt")
plist = f.readlines()
f.close()
现在,plist包含一个格式化的、以空格分隔的进程列表:

  • 第一列是正在运行的可执行文件的名称
  • 第二列是表示正在运行的进程的命令
  • 第三列是进程ID
这应该很容易用python解析。请注意,第一行数据是列的标签,而不是实际的进程


请注意,此方法仅适用于windows

感谢@hb2pencil提供WMIC命令!以下是在不使用文件的情况下通过管道输出的方法:

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

与用于获取进程的实际python工具相比,来自子进程命令的管道信息并不理想。尝试psutil模块。要获取流程编号列表,请执行以下操作:

psutil.get_pid_list()
恐怕您必须在线下载此模块,它不包含在python发行版中,但这是解决问题的更好方法。要访问您有编号的进程的名称,请执行以下操作:

psutil.Process(<number>).name
这将使用可执行文件的名称,因此,例如,要查找powershell窗口,您可以执行以下操作:

process_exists("powershell.exe")

我使用get_pid_list()被拒绝访问。我在windows和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"

嘿欢迎来到StackOverflow!如果你已经发布了一些你尝试过但没有成功的东西,这将非常有帮助。这让回答问题的人知道你有什么问题。祝你的问题好运!谢谢,WMIC工作得很好。不幸的是,输出文本文件不容易解析。它在UTF-16中,所以我必须将其解码并重新编码为ASCII,以便使用if(procList中的processName)轻松解析:return trueget_pid_list()已被弃用,使用pids()INSTEAD我做了一些测试,对我来说,在win10 psutil上执行与管道WMIC相同的任务需要大约10倍的时间
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"