Regen Techlog

Web・プログラミングの技術メモ

Pythonで簡単にWindowsサービスを作る

      2016/08/14

Pythonで書いた処理をバックグラウンドで動かしておきたいときに、Windowsサービスとして書いておくとPC起動時の自動起動や開始・停止が非常に簡単にできます。

PythonでWindowsサービスを書くにはpywin32モジュールを使うと簡単です。

コード

次のコードで、1秒毎に日付をファイルに出力するサービスが作れます。
好きな処理をさせるにはwhileの中身を変えます。

サービスではターミナルに情報を出力することはできないので、ファイルやWindowsイベントログなどに出力しましょう。

コマンドラインオプション

スプリクトを直接実行した場合はwin32serviceutil.HandleCommandLine()が呼ばれ、サービスの登録や開始といったいくつかのコマンドラインオプションが指定可能です。

以下の例以外のオプションもあります。
オプション無しでスプリクトを実行するとオプション一覧が表示されます。

サービスの登録

python service.py install

サービスの登録に必要なのは、以下の2つです。

  • _svc_name_: サービス名
  • _svc_display_name_: 表示名

サービスの開始

python service.py start

サービスが開始されると、SvcDoRun()メインスレッドから呼ばれます。

SvcDoRun()が終了するとサービスが終了してしまうので、サービスの停止が指示されるまでwhileループを回すなどして処理を続ける必要があります。

サービスの停止

python service.py stop

サービスが停止されると、SvcStop()メインスレッドとは別のスレッドから呼ばれます。
上の例ではサービス停止時にself.runを偽にすることで処理を止めています。

 - プログラミング

コメントを残す

  関連記事

lxmlでスクレイピングするときのコツ

PythonでスクレイピングをしようとするとBeautifulSoupやlxml …

Python小ネタ

Pythonの意外と知られていない小ネタを紹介します。

browsercookiejar: ブラウザのCookieをPythonから利用する

ウェブスクレイピングの記事を書きましたが、ログインが必要なページから情報を取得す …

WindowsでPython Netifacesをインストールする

Pythonでマジックパケットを監視してみようと思ってプログラムを書いていたので …

「Unable to find vcvarsall.bat」の対処法

C/C++などのビルドが必要なファイルを含むPythonパッケージをWindow …

SourceTreeのGit-Flowで必ずno-ffする

GUIでGit操作ができるクライアントの一つSourceTreeですが、Git- …

Suspend on LAN

ネットワークに接続されたPCを遠隔で起動する技術にWake on LAN(WoL …

THETA画像のEXIF読み取りと傾き補正

最近一部で話題のTHETA(ワンショット全球パノラマカメラ)ですが,THETAを …

VC++9.0でOpenMP使用時の注意点

OpenMPを使ったCライブラリをPythonで使うためにPython本体のバー …

子テーマでサイドバーを最後に追加する

WordPressでテーマをカスタマイズする場合は子テーマを使うのが一般的ですが …