繁体   English   中英

在Python中确定正在运行的程序

[英]Determining running programs in Python

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

感谢@ hb2pencil for 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
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!

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

psutil.get_pid_list()

我担心你必须在线下载这个模块,它不包含在python发行版中,但这是解决问题的更好方法。 要访问您拥有编号的流程名称,请执行以下操作:

psutil.Process(<number>).name

这应该是你正在寻找的。 此外,这是一种查找特定进程是否正在运行的方法:

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

这使用可执行文件的名称,例如,要查找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"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM