Получение имени процесса, соответствующего активному окну

Как это можно сделать с помощью Python в Ubuntu?

3
задан 27 April 2017 в 22:29

3 ответа

psutil кажется, то, что Вы могли бы хотеть.

То, что неясно в Вашем вопросе, - хотите ли Вы исполняемое имя или заголовок окна. Однако, если Вы после имени исполняемого процесса можно сделать это с psutil и некоторые другие функции.

Во-первых, установка psutil с pip (Python 2) или pip3 (Python 3). Если команда не найдена затем установку python-pip или python3-pip пакеты, в зависимости от который версия Python Вы работаете с:

# Python 2
sudo pip install psutil

# Python 3
sudo pip3 install psutil

Затем, мы можем использовать psutil в любом данном сценарии Python и передаче PID. Это - пример того, что он может сделать путем выполнения python3 в командной строке, работающей с интерактивной оболочкой Python 3 и добирающейся, который информация процесса с помощью Python кодирует прямо на оболочке Python:

>>> import psutil
>>> import os
>>> os.getpid()
6284
>>> p = psutil.Process(os.getpid())
>>> p.name()
'python3'
>>> p.exe()
'/usr/bin/python3.5'
>>> p.cmdline()
['python3']
>>>

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


Править

Мы можем также объединить это в цепочку с ответом Jacob Vlijm здесь также, чтобы получить PID и передать его в psutil (Обратите внимание, что я сокращаю 'подпроцесс' к 'SP' в моем импорте, но это все еще subprocess модуль):

import psutil
import subprocess as sp

p = psutil.Process(int(sp.check_output(["xdotool", "getactivewindow", "getwindowpid"]).decode("utf-8").strip()))

... и затем продолжите использовать psutil извлечь определенные данные.

2
ответ дан 27 April 2017 в 22:29
import wnck
screen = wnck.screen_get_default()
window = screen.get_active_window()
pid = window.get_pid()
0
ответ дан 27 April 2017 в 22:29

Короткий ответ

import subprocess

pid = subprocess.check_output(["xdotool", "getactivewindow", "getwindowpid"]).decode("utf-8").strip()

print(pid)

, но вам нужно установить xdotool:

sudo apt install xdotool

Получить имя WM_CLASS

Мы даже можем превзойти pid:

#!/usr/bin/env python3
import subprocess

w_id = subprocess.check_output(["xdotool", "getactivewindow"]).decode("utf-8")
name = subprocess.check_output(["xprop", "-id", w_id, "WM_CLASS"]).decode("utf-8").strip()

print(name)

Имейте ввиду, что WM_CLASS часто, но не обязательно всегда является именем процесса .

0
ответ дан 27 April 2017 в 22:29

Другие вопросы по тегам:

Похожие вопросы: