4

我试图在 python 中确定某个应用程序是否已经打开,这样我就不会打开它两次。我做了一些研究,发现可以提取程序的进程名称,但我唯一遇到的问题是我正在检查的程序本身有一个非常通用的进程名称(在这种情况下, “pythonw.exe”或“cmd.exe”)。

但是,它在 Windows 任务管理器的应用程序列表中确实有不同的名称,所以我的问题是是否有任何方法可以使用它来检测程序是否打开。我的工作场所不允许我下载用于此脚本的其他程序或模块,因此答案需要使用 os 模块或 Windows 库中已包含的类似模块。

4

2 回答 2

7

我使用以下代码检查某个程序是否正在运行:

import psutil     #psutil - https://github.com/giampaolo/psutil

# Get a list of all running processes
list = psutil.pids()

# Go though list and check each processes executeable name for 'putty.exe'
for i in range(0, len(list)):
    try:
        p = psutil.Process(list[i])
        if p.cmdline()[0].find("putty.exe") != -1:
            # PuTTY found. Kill it
            p.kill()
            break;
    except:
        pass

PS:您可以使用Virtual ENV安装自己的模块,也可以选择其他安装路径!

于 2013-01-04T14:46:39.373 回答
2

我认为 Python 标准模块无法完成您的要求。它需要一些 3rd 方库,例如win32api, win32pdhutil, win32con.

另一种方法是使用 windows 命令tasklist。使用 Python 作为 bat 包装器,并解析tasklist.

C:\Documents and Settings\Administrator>tasklist

Image Name                   PID Session Name     Session#    Mem Usage
========================= ====== ================ ======== ============
System Idle Process            0 Console                 0         28 K
System                         4 Console                 0        236 K
smss.exe                     812 Console                 0        388 K
csrss.exe                    860 Console                 0      3,720 K
winlogon.exe                 884 Console                 0      4,148 K
services.exe                 928 Console                 0      3,356 K
lsass.exe                    940 Console                 0      5,904 K
vmacthlp.exe                1100 Console                 0      2,348 K
...
于 2013-01-04T14:38:52.330 回答