2010-07-09 2 views
4

Я думаю, что это довольно простой вопрос, но здесь все равно.Мониторинг процесса в Python?

Мне нужно написать скрипт python, который проверяет, выполняется ли процесс, скажем notepad.exe, запущен. Если процесс запущен, ничего не делайте. Если это не так, запустите его. Как это будет сделано.

Я использую Python 2.6 на Windows XP

+0

Я не думаю, что необходимо упомянуть «черный» ... – nevets1219

+0

Хорошо, исправлено это. У вас есть решение проблемы? –

ответ

4

Есть несколько вариантов,

1: более сырой, но очевидно, будет делать некоторые обработки текста против:

os.popen('tasklist').read() 

2: Более привлекательным вариантом было бы использовать pywin32 и исследовать API-интерфейсы win32, чтобы выяснить, какие процессы запущены.

3: WMI (I found this только сейчас) и here is a vbscript пример того, как запросить машину для процессов через WMI.

+0

Просто, чтобы предложить немного больше пояснений, первый вариант становится чрезвычайно простым с поиском регулярных выражений >>> bool (re.search ('notepad.exe', os.popen ('tasklist'). Read())) – andyortlieb

+1

Вам даже не нужно регулярное выражение. Простое выражение 'if substring in string:' -type работает отлично. (Вернее, 'not in', так как он должен выполняться, когда процесс неактивен.) – JAB

+0

Это именно то, что мне нужно! Танск так много! –

15

функция создания процесса для os модуля, по-видимому устаревшая в Python 2.6 и более поздние версии с модулем будучи модулем выбора сейчас, так что ...

if 'notepad.exe' not in subprocess.Popen('tasklist', stdout=subprocess.PIPE).communicate()[0]: 
    subprocess.Popen('notepad.exe') 

Обратите внимание, что в Python 3, строка проверяется должны быть объектом байт, так что было бы

if b'notepad.exe' not in [blah]: 
    subprocess.Popen('notepad.exe') 

(имя файла/процесса запуска не нужно быть объектом байт.)

+0

+1 Это важный момент. Я пошел с os.process() ради более короткой демонстрации, но важно отметить, что подпроцесс намного эффективнее (и, конечно, не устарел). – andyortlieb

Смежные вопросы