web-dev-qa-db-ja.com

アクティブなウィンドウに対応するプロセスの名前を取得する

UbuntuでPythonを使用してどのように行うことができますか?

3
user71215

psutilはあなたが望むかもしれないもののようです。

質問で不明確なのは、実行可能ファイル名とウィンドウタイトルのどちらが必要かということです。ただし、実行可能プロセスの名前の後にいる場合は、psutilおよびその他の関数を使用して実行できます。

まず、psutilpip(Python 2)またはpip3(Python 3)と一緒にインストールします。コマンドが見つからない場合は、使用しているPythonバージョンに応じてpython-pipまたはpython3-pipパッケージをインストールします。

# Python 2
Sudo pip install psutil

# Python 3
Sudo pip3 install psutil

次に、任意のPythonスクリプトでpsutilを使用し、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パッケージを最初にインストールする必要があります。


EDIT

また、これを Jacob Vlijm の回答で連鎖させて、PIDを取得してpsutilに渡すこともできます(インポートでは 'subprocess'を 'sp'に短縮し、しかし、それはまだsubprocessモジュールです):

import psutil
import subprocess as sp

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

...その後、引き続きpsutilを使用して特定のデータを抽出します。

2
Thomas Ward

簡潔な答え

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が頻繁に行われることはありますが、常にプロセスであるとは限らないことに注意してくださいname

1
Jacob Vlijm
import wnck
screen = wnck.screen_get_default()
window = screen.get_active_window()
pid = window.get_pid()
0
ADcomp