Как определить в python, если внешняя программа открыта?

Я пытаюсь определить в python, если определенное приложение уже открыто, так что я не открываю его дважды. Я провел небольшое исследование и обнаружил, что можно вывести имя процесса программы, но единственная проблема, с которой я сталкиваюсь, - это программа, которую я проверяю для себя, имеет довольно общее имя процесса (в этом случае, "pythonw.exe" или "cmd.exe" ).

Однако он имеет разные имена в списке приложений диспетчера задач Windows, поэтому мой вопрос заключается в том, есть ли способ использовать это, чтобы определить, открыта ли программа или нет. Мое рабочее место не позволит мне загружать дополнительные программы или модули для использования для этого script, поэтому для ответа необходимо использовать модуль os или что-то подобное, которое уже включено в библиотеку Windows.

2 ответа

Я думаю, что стандартные модули Python не могут выполнить ваши требования. Для этого нужны некоторые сторонние библиотеки, такие как 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
...


Я использую следующий код, чтобы проверить, работает ли определенная программа:

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 или просто выбрать альтернативный путь установки!

licensed under cc by-sa 3.0 with attribution.