MPDで再生中のアーティストと曲名を表示する
デーモン編


前回、python-mpdライブラリを使って、MPDで再生中のアーティス ト名と曲名を表示する方法を紹介しました。
そこで、今回は前回のプログラムを少し変更し、デーモンで起動する様に変更します。
pythonプログラムをデーモン化する方法はいくつかありますが、今回はpython-daemonライブラリを使ってみました。
まずは、python-daemonライブラリをインストールします。

$ sudo apt-get install python-daemon

python-daemonライブラリを使ったコードは以下の通りです。
前回のメインモジュールをdaemon_main()に変更しただけです。

#!/usr/bin/python
#-*- encoding: utf-8 -*-
#
# install python-daemon
# sudo apt-get install python-daemon
#
import sys
import subprocess
from mpd import MPDClient
from daemon import DaemonContext
from daemon.pidlockfile import PIDLockFile

def daemon_main():
    lcd_command="/home/pi/lcd/lcd"

    client = MPDClient()
    client.timeout = 10
    client.idletimeout = None
    client.connect("192.168.111.40", 6600)  # connect to MPD Server

    while True:
        client.idle()
#        print(client.status()["state"])
        if client.status()["state"] == "play":
#            print(client.currentsong())
            artist="artist" in client.currentsong()
            title="title" in client.currentsong()
            if artist and title:
#               print(client.currentsong()["artist"])
#               print(client.currentsong()["title"])
                string=client.currentsong()["artist"]+"-"+client.currentsong()["title"]
            else:
                string=client.currentsong()["file"]
#            print string
            args=[lcd_command,string]
#            print args
            subprocess.call(args)
        if client.status()["state"] == "stop":
            args=[lcd_command]
#            print args
            subprocess.call(args)


    client.close()              # send the close command
    client.disconnect()         # disconnect from the server

if __name__ == '__main__':
#    argv = sys.argv  # コマンドライン引数を格納したリストの取得
#    argc = len(argv) # 引数の個数

    dc = DaemonContext(
    pidfile=PIDLockFile('/tmp/mpdClient.pid'),
    stdout=open('/home/pi/mpd/stdout.txt', 'w+'),
    stderr=open('/home/pi/mpd/stderr.txt', 'w+')
    )

    with dc:
        daemon_main()

ロックファイルを/tmpに作るので、ルート権限で起動する必要があります。
エラー発生時は「/home/pi/mpd/stderr.txt」にエラーが残ります。