言語-Python !
記事の言及:
1. Pythonのデーモン;
2. Pythonでのログイン。
3. Pythonのプログラムの構成ファイルの保存。
4. PythonスクリプトからOSコマンドを操作します。
5. gitから最近の変更のリストを取得します。
6.標準のUbuntuポップアップ通知。
タスクを実装するために、 Python (高レベルで、解釈された、オブジェクト指向で拡張可能なプログラミング言語)が選択されました。
最初に、2つのソースが非常に役立ちました。
-公式ドキュメント: http : //docs.python.org/tutorial/index.html
-ロシア語の一連のIBM記事: https : //www.ibm.com/developerworks/en/library/l-python_part_1/
基本を学びながら、プログラムの作成を開始します。
1.デーモン
ネットワーク上には悪魔の多くの認識があります 。肯定的なレビューと魅力的な名前を持つ既成の悪魔の1つを選択しました: http : //www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/ 。 このデーモンでは、この場所でdaemon.py stopコマンドを使用してシャットダウンする際に問題が発生しました 。
except OSError, err: err = str(err) if err.find("No such process") > 0: if os.path.exists(self.pidfile): os.remove(self.pidfile)
これはロシアのロケール、私のシステムの「 そのようなプロセスはありません 」というフレーズがロシア語で返されたために発生したようです。 これを修正する簡単な方法は、このチェックを削除することです:
except OSError, err: if os.path.exists(self.pidfile): os.remove(self.pidfile)
2.ロギング
プログラムを通知する最も簡単な方法は、 print ()関数を使用することです。 ただし、このプログラムはデーモンとして起動され、その状態に関する情報を起動コンソールに出力する必要はありません。 この場合の便利なオプションは、ログをファイルに書き込むことです。 Pythonには、標準ライブラリの一部であるロギングの組み込みメソッド、 ロギングモジュール( http://docs.python.org/library/logging.html )があります。
モジュールには多くのロギングオプション( ハンドラー 、 http : //docs.python.org/library/logging.handlers.html )があります : StreamHandler 、 FileHandler 、 WatchedFileHandler 、 RotatingFileHandler 、 TimedRotatingFileHandler 、 SocketHandler 、 DatagramHandler 、 SysLogHandler 、 NTlerventHandlerhandlerndandhandhandler HTTPHandler デーモンを制御するために、 FileHandlerが使用されました。
logging.basicConfig(filename = tempfile.gettempdir() + '/gitPushNotify.log', level = logging.DEBUG, format = '%(asctime)s %(levelname)s: %(message)s', datefmt = '%Y-%m-%d %I:%M:%S') logging.info('Daemon start')
3. Pythonプログラムの構成を保存する
アプリケーションの構成を保存するには、 iniファイルとそれらを操作するための組み込みのConfigParserモジュールが使用されます ( http://docs.python.org/library/configparser.html ):
config = ConfigParser.ConfigParser() configPath = os.path.dirname(__file__) + '/config.ini' config.read(configPath)
関数によるパラメーター値の取得(この場合、 整数値の受信):
timeout = config.getint('daemon', 'timeout')
4. PythonスクリプトからのOSコマンドの操作
システムコマンドを実行するには、 サブプロセスモジュール( http://docs.python.org/library/subprocess.html )のcheck_output ()メソッドを使用します。
sourceOutput = subprocess.check_output('cd ' + repositoryPath, shell=True)
osモジュールメソッドも使用できます。
sourceOutput = os.system(commandString)
ドキュメントでは、 サブプロセスの使用を推奨しています。
5. gitから最近の変更のリストを取得する
whatchangedコマンド( http://schacon.github.com/git/git-whatchanged.html )を使用して、最新のリポジトリ変更を表示すると便利です。 このコマンドを使用すると、表示されるログメッセージの形式を設定し、表示される変更の数を設定できます。 コマンドの使用例:
$ git whatchanged master -10 --date=raw --date-order --pretty=format:"%H %n%cn %n%ce %n%ct %n%s"
引数の順序:
master-リポジトリブランチ;
-10-表示されたレコードの数。
--date-order-変更された日付でソート。
--pretty = format: "..." -出力フォーマット。
6.標準のUbuntuポップアップ通知
Ubuntuでポップアップ通知を処理するには 、 libnotifyライブラリ( https://wiki.ubuntu.com/NotificationDevelopmentGuidelines )を使用します。 次のコマンドでインストールされているかどうかを確認します。
$ dpkg -l | grep libnotify-bin
またはすぐに実行します:
$ sudo apt-get install libnotify-bin
次のコマンドを使用して通知を表示できます。
$ notify-send "Habr!"
$ notify-send -i notification-message-email "Title" "Message"
-iフラグは画像であり、システム名またはsvg 、 png、またはjpg形式の画像へのパスが示されます。
デーモンの起動
ファイルを実行可能にする必要があります。
$ chmod +x gitPushNotifyDaemon.py
構成ファイルで開始する前に、リポジトリへのパスとポーリング頻度を指定する必要があります。
$ vim config.ini
打ち上げ:
$ python gitPushNotifyDaemon.py start
すべてがうまくいった場合:
Daemon starting..
開始通知が表示されます:
これで、次のコマンドを実行して、プロセスのリストにデーモンを表示できます。
$ ps uax | grep gitPushNotifyDaemon.py
ログを使用して、デーモンのプロセスを監視できます。
$ tail -f /tmp/gitPushNotify.log
デバッグ用にgitPushNotify.pyファイルを個別に実行することもできます。
$ python gitPushNotify.py
プロジェクトリポジトリ: https : //github.com/antonfisher/gitPushNotify
それだけです 良い一日を!
参照:
1. http://docs.python.org/tutorial/index.html-公式チュートリアル。
2. https://www.ibm.com/developerworks/ru/library/l-python_part_1/-一連のIBM記事。
3. http://www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/-Sander Marechalのデーモンの実装。
4. http://docs.python.org/library/logging.html-Python 、 ロギングモジュール。
5. http://docs.python.org/library/configparser.html-Python 、モジュールConfigParser 。
6. http://docs.python.org/library/subprocess.html-Python 、 サブプロセスモジュール。
7. https://wiki.ubuntu.com/NotificationDevelopmentGuidelines-libnotifyの説明。
8. http://schacon.github.com/git/git-whatchanged.html git-whatchangedコマンドの説明。