watchみたいにファイル変更があったらリロードするコマンド作った(pywatcher)Pythongulpとかは指定したファイルの変更があると、それに応じてアクションを実行してくれる機能がありますね。bottleやdjangoのDEVサーバ等でもコードの変更を検知して自動でプロセスを再起動してくれる機能があります。先日作業中に、WEBサーバではないものの常駐型プロセスの開発をするケースがあり、コード書き換えごとに再起動するのが面倒だったので、変更を検知するとプロセスを自動で再起動してくれるコードを書きました。今回はそれをもう少し整えてPyPIに登録したのでまとめておきます。PyWatcherpywatcherというライブラリを作製しました。setup.py実処理が書いてあるpywatcher.pyとコマンドラインツールとしてのインターフェースをもつcommand.pyだけの作りです。pywatcherをライブラリとして利用することは出来ると思いますが、本ライブラリ自体が提供するpywatcherというコマンドラインツールを使うだけでいいと思います。インストールpipでいれるだけです。pywatcherこれでpywacherコマンドが使用可能になります。基本的にはREADME通りですが、以下のように使用します。localhost'-tで監視ディレクトリを指定し、-cで常駐するプロセスのコマンドを指定します。以降は監視ディレクトリ配下で変更が発生するたびに指定しているプロセスが停止され、再起動します。msこんな感じで呼び出されているプロセス側の標準出力もロギングされています。終了時はctrl+cで停止します。指定したディレクトリのすべてのファイルではなく特定のパターンにマッチする場合のみ監視したいという要件もあるかと思いますので-pオプションを設けています。本オプションでGlobパターンを指定することで、それに該当するファイルの変更のみをトリガーとすることができます。'*.py'ちょっと込み入った事pywatcherはwatchdogというライブラリを使用しています。このライブラリはファイルの変更を検知してそのイベントに応じて何かをするといった処理を簡単にかけるようにしてくれます。"""delete時の処理"""抜粋ですが、基本的にFileSystemEventHandlerを継承しon_xxxメソッドを実装するだけで処理がかけます。引数で渡ってくるeventはFileSystemEventHandlerの場合watchdog.events.FileSystemEventのサブクラスとなっており、ファイルパス等の情報が取得できますのでパターンマッチも容易でした。まとめとりあえず作れるかな?とおもって作り始めてみたらさっとできたので個人的には満足しています。2.xを使ってWebSocketを扱う(その1)現在仕事でWEBサービスを作るときはDjango一択な環境にいます。上でps的な感じでプロセスの情報を取りたかった普段業務はWindows上で行っています。embyを導入したISUCON11予選に参加して32位で敗退してきました。8はてなブログをはじめよう!denzowさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。