Как проверить запущена ли программа python

Я использую Python 2.7 и Windows 7 64 бит. Я хочу знать, запущен ли процесс (python.exe) в диспетчере задач / Процессы. Я прошел через http://www.videntity.com/2010/05/check-to-make-sure-a-process-is-running-and-restart-it-if-its-not-a-recipe-in-python/, но это не для windows.

user2622785 12 мар ’14 в 12:43 2014-03-12 12:43
2014-03-12 12:43

3 ответа

На странице, на которую вы ссылаетесь, используется os.popen()( официальные документы здесь)

В Windows вы должны использовать «список задач» в качестве аргумента для os.popen(), а не «ps -Af»

>>> import os >>> tmp = os.popen(«tasklist»).read() # it would return a str type >>> «python.exe» in tmp True
user2601851 12 мар ’14 в 13:08 2014-03-12 13:08
2014-03-12 13:08

Вот как я это делаю с win32 :

from win32com.client import GetObject WMI = GetObject(‘winmgmts:’) processes = WMI.InstancesOf(‘Win32_Process’) if «python.exe» in [process.Properties_(‘Name’).Value for process in processes]: #do the thing

Источник: stackru.com

Как узнать, что в работе python telegram bot произошла ошибка?

Проверка Python, запущен процесс или нет

Я пытаюсь создать скрипт на Python, который позже я буду запускать как сервис. Теперь я хочу запускать определенную часть кода только во время работы iTunes. Из некоторых исследований я понимаю, что опрос всего списка команд, а затем поиск приложения для этого списка стоит дорого.

Я обнаружил, что процессы в операционных системах на основе UNIX создают файл блокировки для уведомления о том, что программа в данный момент выполняется, и в этот момент мы можем использовать os.stat(location_of_file) чтобы проверить, существует ли файл, чтобы определить, запущена ли программа или не.

Существует ли аналогичный файл блокировки, созданный в Windows?

Если нет, то каковы различные способы в Python, с помощью которых мы можем определить, запущен процесс или нет?

Я использую Python 2.7 и интерфейс iTunes COM.

ОТВЕТЫ

Ответ 1

Вы не можете полагаться на блокировку файлов в Linux или Windows. Я бы просто укусил пулю и перебрал все работающие программы. Я правда не верю, что это будет так «дорого», как вы думаете. psutil — превосходный кроссплатформенный кабель модуля Python для перечисления всех запущенных программ в системе.

import psutil «someProgram» in (p.name() for p in psutil.process_iter())

Ответ 2

import subprocess def process_exists(process_name): call = ‘TASKLIST’, ‘/FI’, ‘imagename eq %s’ % process_name # use buildin check_output right away output = subprocess.check_output(call) # check in last line for process name last_line = output.strip().split(‘rn’)[-1] # because Fail message could be translated return last_line.lower().startswith(process_name.lower())

Читайте также:
Как запустить служебную программу снкдск

и теперь вы можете сделать:

Как узнать запущена ли cs go 100% способ


>>> process_exists(‘eclipse.exe’) True >>> process_exists(‘AJKGVSJGSCSeclipse.exe’) False

Чтобы не вызывать это несколько раз и иметь обзор всех процессов таким образом, вы можете сделать что-то вроде:

# get info dict about all running processes call = ‘TASKLIST’, ‘/FO’, ‘CSV’ output = subprocess.check_output(call) # get rid of extra » and split into lines output = output.replace(‘»‘, »).split(‘rn’) keys = output[0].split(‘,’) proc_list = [i.split(‘,’) for i in output[1:] if i] # make dict with proc names as keys and dicts with the extra nfo as values proc_dict = dict( [( i[0], dict(zip(keys[1:], i[1:])) ) for i in proc_list] ) print(proc_dict.keys())

Ответ 3

Файлы блокировки обычно не используются в Windows (и редко в Unix). Обычно, когда программа Windows хочет увидеть, что другой экземпляр уже запущен, он вызовет FindWindow с известным названием или именем класса.

def iTunesRunning(): import win32ui # may need FindWindow(«iTunes», None) or FindWindow(None, «iTunes») # or something similar if FindWindow(«iTunes», «iTunes»): print «Found an iTunes window» return True

Ответ 4

Я хотел бы добавить это решение в список в исторических целях. Он позволяет вам найти на основе .exe вместо заголовка окна, а также вернуть использованную память и PID.

processes = subprocess.Popen(‘tasklist’, stdin=subprocess.PIPE, stderr=subprocess.PIPE, stdout=subprocess.PIPE).communicate()[0] # Put a regex for exact matches, or a simple ‘in’ for naive matches

Вырез из примера вывода:

notepad.exe 13944 Console 1 11,920 K python.exe 5240 Console 1 28,616 K conhost.exe 9796 Console 1 7,812 K svchost.exe 1052 Services 0 18,524 K iTunes.exe 1108 Console 1 157,764 K

Ответ 5

Вы были бы довольны тем, что ваша команда Python запускает другую программу для получения информации?

Если это так, я бы посоветовал вам взглянуть на PsList и все его варианты. Например, следующее будет сообщать вам о любом запущенном процессе iTunes

PsList itunes

Если вы можете понять, как интерпретировать результаты, это, надеюсь, вам поможет.

Edit:

Когда я не запускаю iTunes, я получаю следующее:

pslist v1.29 — Sysinternals PsList Copyright (C) 2000-2009 Mark Russinovich Sysinternals Process information for CLARESPC: Name Pid Pri Thd Hnd Priv CPU Time Elapsed Time iTunesHelper 3784 8 10 229 3164 0:00:00.046 3:41:05.053

С запуском itunes я получаю эту дополнительную строку:

iTunes 928 8 24 813 106168 0:00:08.734 0:02:08.672

Однако следующая команда выводит информацию только о самой программе iTunes, то есть аргументе -e :

pslist -e itunes

Ответ 6

win32ui.FindWindow(classname, None) возвращает дескриптор окна, если найдено какое-либо окно с заданным именем класса. В противном случае он поднимает window32ui.error .

Читайте также:
Программа написать сообщение и сохранить

import win32ui def WindowExists(classname): try: win32ui.FindWindow(classname, None) except win32ui.error: return False else: return True if WindowExists(«DropboxTrayIcon»): print «Dropbox is running, sir.» else: print «Dropbox is running. not.»

Я обнаружил, что имя класса окна для значка в Dropboxbox было DropboxTrayIcon, используя Autohotkey Window Spy.

Ответ 7

Psutil, предложенный Mark, на самом деле является лучшим решением, единственным недостатком является лицензия, совместимая с GPL. Если это проблема, вы можете вызвать команды информации о процессе Windows: wmic process , где доступен WMI (XP pro, vista, win7) или tasklist . Вот описание, чтобы сделать это: Как вызвать внешнюю программу на python и получить код вывода и возврата? (не единственный возможный способ. )

Ответ 8

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

import psutil psutil.pid_exists(pid)

проверить документы для получения дополнительной информации http://psutil.readthedocs.io/en/latest/#psutil.pid_exists

Ответ 9

Это хорошо работает

def running(): n=0# number of instances of the program running prog=[line.split() for line in subprocess.check_output(«tasklist»).splitlines()] [prog.pop(e) for e in [0,1,2]] #useless for task in prog: if task[0]==»itunes.exe»: n=n+1 if n>0: return True else: return False

Ответ 10

import psutil for p in psutil.process_iter(attrs=[‘pid’, ‘name’]): if «itunes.exe» in (p.info[‘name’]).lower(): print(«yes», (p.info[‘name’]).lower())

Ответ 11

Если вы тестируете приложение с помощью Behave, вы можете использовать pywinauto . Аналогично предыдущему комментарию, вы можете использовать эту функцию:

def check_if_app_is_running(context, processName): try: context.controller = pywinauto.Application(backend=’uia’).connect(best_match = processName, timeout = 5) context.controller.top_window().set_focus() return True except pywinauto.application.ProcessNotFoundError: pass return False

backend может быть ‘uia’ или ‘win32’

timeout , если в отношении силы повторно соединиться с приложением в течение 5 секунд.

Ответ 12

import subprocess as sp for v in str(sp.check_output(‘powershell «gps | where «‘)).split(‘ ‘): if len(v) is not 0 and ‘-‘ not in v and ‘\r\’ not in v and ‘iTunes’ in v: print(‘Found !’)

Источник: utyatnishna.ru

Проверьте, запущен ли процесс или нет в Windows с помощью Python

Я пытаюсь создать сценарий Python, который позже буду запускать как службу. Теперь я хочу запускать определенную часть кода только при запущенном iTunes. Из некоторых исследований я понимаю, что опрос всего списка команд с последующим поиском приложения для этого списка стоит дорого.

Я обнаружил, что процессы в операционных системах на основе UNIX создают файл блокировки, чтобы уведомить о том, что программа в настоящее время запущена, и в этот момент мы можем использовать os.stat(location_of_file) чтобы проверить, существует ли файл, чтобы определить, запущена программа или нет. Создан ли аналогичный файл блокировки в Windows? Если нет, то каковы различные способы в Python, с помощью которых мы можем определить, запущен процесс или нет? Я использую Python 2.7 и интерфейс iTunes COM.

Читайте также:
Mpi c примеры программ

задан 16 окт.
Что делает COM-интерфейс, если iTunes не работает? — Gabe

Если создать объект с помощью COM-интерфейса в Python, COM-интерфейс автоматически откроет iTunes. — nightf0x

Что бы это ни стоило, это зависит от отдельной программы, хочет ли она создать файл блокировки или файл PID. Не все программы Linux / UNIX это делают. — David Z

19 ответы

Вы не можете полагаться на файлы блокировки в Linux или Windows. Я бы просто стиснул зубы и перебрал все запущенные программы. Я действительно не верю, что это будет так «дорого», как вы думаете. псутил это отличный кроссплатформенный кабель модуля Python для перечисления всех запущенных программ в системе.

import psutil «someProgram» in (p.name() for p in psutil.process_iter())
ответ дан 03 апр.

После опробования этой программы доступ к некоторым процессам запрещен, даже когда я запускаю ее как администратор. Я, вероятно, просто буду использовать try и за исключением того, чтобы игнорировать эти экземпляры, но это то, чего нужно остерегаться — TrevorKirkby

Теперь похоже на BSD — Энтони

Предупреждение: это вызывает psutil.NoSuchProcess исключение, если процесс, который psutil.get_pid_list() вернулся уже вышел, когда psutil.Process(i).name выполняется. Обязательно поймите это. — фнкр

Остерегайтесь случая. Результат чувствителен к регистру. — user3103059

В тестах, которые я проводил, этот метод чуть более чем в 10 раз быстрее, чем subprocess позвонить tasklist (для Windows). — S3DEV

import subprocess def process_exists(process_name): call = ‘TASKLIST’, ‘/FI’, ‘imagename eq %s’ % process_name # use buildin check_output right away output = subprocess.check_output(call).decode() # check in last line for process name last_line = output.strip().split(‘rn’)[-1] # because Fail message could be translated return last_line.lower().startswith(process_name.lower())
и теперь вы можете:
>>> process_exists(‘eclipse.exe’) True >>> process_exists(‘AJKGVSJGSCSeclipse.exe’) False

Чтобы не вызывать это несколько раз и иметь обзор всех процессов таким образом, вы можете сделать что-то вроде:

# get info dict about all running processes import subprocess output = subprocess.check_output((‘TASKLIST’, ‘/FO’, ‘CSV’)).decode() # get rid of extra » and split into lines output = output.replace(‘»‘, »).split(‘rn’) keys = output[0].split(‘,’) proc_list = [i.split(‘,’) for i in output[1:] if i] # make dict with proc names as keys and dicts with the extra nfo as values proc_dict = dict((i[0], dict(zip(keys[1:], i[1:]))) for i in proc_list) for name, values in sorted(proc_dict.items(), key=lambda x: x[0].lower()): print(‘%s: %s’ % (name, values))

Источник: stackovergo.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru