4

私はPythonで特定のアプリケーションがすでに開いているかどうかを判断しようとしているので、2回開かないようにしています。少し調べてみたところ、プログラムのプロセス名を取得できることがわかりましたが、それに関して私が抱えている唯一の問題は、自分自身をチェックしているプログラムがかなり一般的なプロセス名を持っていることです(この場合、 「pythonw.exe」または「cmd.exe」)。

ただし、Windowsタスクマネージャのアプリケーションリストでは名前が異なるため、プログラムが開いているかどうかを検出するためにそれを使用する方法があるかどうかが私の質問です。私の職場では、このスクリプトに使用する追加のプログラムやモジュールをダウンロードすることはできません。そのため、答えは、Windowsライブラリにすでに含まれているosモジュールまたは同様のものを使用する必要があります。

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 標準モジュールでは要件を満たせないと思います。、、などwin32apiのサードパーティのライブラリが必要です。win32pdhutilwin32con

もう 1 つの方法は、windows コマンドを使用することtasklistです。Python をバット ラッパーとして使用し、の出力を解析します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 に答える