【Python】Windowsサービスの状態を取得する(psutil)

Pythonでは「psutil.win_service_get」を使って、Windowsサービスを取得したり、詳細を確認したりできます。

該当のWindowsサービスがあるか?Windowsサービスのパスは?Windowsサービスは稼働しているか?を取得できます。

今回は、PythonでWindowsサービスを取得する方法を解説します。

Windowsサービスを取得する(psutil)

すべてのWindowsサービスを取得する

import psutil

# Windowsサービスをすべて取得する
list(psutil.win_service_iter()
#[結果] [<WindowsService(name='AdobeARMservice', display_name='Adobe Acrobat Update Service') at 2008017883712>, 
#[結果] <WindowsService(name='AJRouter', display_name='AllJoyn Router Service') at 2008017883768>, 
#[結果] <WindowsService(name='ALG', display_name='Application Layer Gateway Service') at 2008017883824>,
#[結果] 以降省略

Windowsのサービスをすべて取得するには「psutil.win_service_iter」を使います。

Windowsサービスのサービス名(英語)、サービス表示名(日本語)がすべて取得できました。

Windowsサービスが存在するか?

import psutil

# Windowsサービスが存在するか?
psutil.win_service_get('SDRSVC')
#[結果] WindowsService(name='SDRSVC', display_name='Windows バックアップ')

psutil.win_service_get('aaa')
#[結果] NoSuchProcess: service 'aaa' does not exist)

Pythonで目的のWindowsのサービスが存在しているか?を確認するには「psutil.win_service_get」を使います。「win_service_get」の引数にサービス名の略称(英語)を指定します。

指定した名前のサービスが存在しない場合はエラーとなります。

Windowsサービスの詳細を取得する

import psutil

# Windowsサービスを取得
win = psutil.win_service_get('fhsvc')
dic = win.as_dict()
for key, item in dic.items():
    print(key, item)

#[結果] display_name File History Service
#[結果] binpath C:\WINDOWS\system32\svchost.exe -k LocalSystemNetworkRestricted -p
#[結果] username LocalSystem
#[結果] start_type manual
#[結果] status stopped
#[結果] pid None
#[結果] name fhsvc
#[結果] description ユーザー ファイルをバックアップ場所にコピーして不慮の損失から保護します

Windowsのサービスの詳細情報を取得するには「psutil.win_service_get」を使います。

そのままでは扱いにくいので、辞書型に変換して1つずつサービス情報を取り出しました。

Windowsサービスのパスを取得する

import psutil

# Windowsサービスの実行パス
win = psutil.win_service_get('fhsvc')
win.binpath()
#[結果] C:\WINDOWS\system32\svchost.exe -k LocalSystemNetworkRestricted -p

Windowsのサービスの実行ファイルのパスを取得するには「psutil.win_service_get」の「binpath」を使います。

「binpath」で実行ファイルのパスを取得できました。

Windowsサービスの実行状態を取得する

import psutil

# Windowsサービスの実行状態
win = psutil.win_service_get('fhsvc')
win.status()
#[結果] running

win = psutil.win_service_get('ssh-agent')
win.status()
#[結果] stopped

Windowsのサービスが実行しているか停止しているかを取得するには「psutil.win_service_get」の「status」を使います。

statusの一覧

running 実行
paused 一時中断
stopped 停止
start_pending 開始中
pause_pending 一時中断が保留中
continue_pending 継続が保留中
stop_pending 停止中

 

「psutil」の詳細は本家ドキュメントを参照してください。

psutilドキュメントhttps://psutil.readthedocs.io/en/latest/

これでPythonの「psutil.win_service_get」を使って、Windowsサービスの状態を取得することができました。

以上、Pythonの「psutil.win_service_get」でWindowsサービスを取得する方法でした。

コメント