如何在python中确定外部程序是否打开?

时间:2013-01-04 14:06:53

标签: python windows

我试图在python中确定某个应用程序是否已经打开,以便我不打开它两次。我做了一点研究,发现可以提取程序的进程名称,但我唯一的问题就是我检查的程序本身有一个非常通用的进程名称(在此case," pythonw.exe"或" cmd.exe")。

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

2 个答案:

答案 0 :(得分:5)

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

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安装自己的模块,或者只选择其他安装路径!

答案 1 :(得分:1)

我认为Python标准模块无法完成您的要求。它需要一些第三方库,例如win32apiwin32pdhutilwin32con

另一种方法是使用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
...