【问题标题】:Determining running programs in Python在 Python 中确定正在运行的程序
【发布时间】:2011-03-26 15:33:03
【问题描述】:

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

【问题讨论】:

  • 嘿!欢迎来到 StackOverflow!如果您发布了您尝试过但对您没有用的东西,那将非常有帮助。这让回答问题的人知道您遇到了什么问题。祝你的问题好运!

标签: python windows process


【解决方案1】:
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!

【讨论】:

  • 谢谢,WMIC 运行良好。不幸的是,输出文本文件并不那么容易解析。它在 UTF-16 中,所以我必须将其解码并重新编码为 ASCII,以便使用 if (procList 中的 processName) 轻松解析:return true
【解决方案2】:

感谢@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

【讨论】:

    【解决方案3】:

    与用于获取进程的实际 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() 已弃用,请改用 pids()
    • 我做了一些测试,对我来说,在 win10 上 psutil 需要大约 10 倍的时间来执行与管道 WMIC 相同的任务
    【解决方案4】:

    我被 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"
    

    【讨论】:

      猜你喜欢
      • 2017-04-22
      • 1970-01-01
      • 2012-01-10
      • 1970-01-01
      • 2011-10-17
      • 2018-12-13
      • 1970-01-01
      • 1970-01-01
      • 2016-10-28
      相关资源
      最近更新 更多