pythonのリストを使って富豪的プログラミング!

バックアップをとろう(その1) - La coda de la corsaの改造ネタの続きです。今回は、スクリプトをルートで起動するのと通常ユーザーで起動する時とで動作を変えたいと思います。具体的には、

  • ルートで実行する時は現状でOK
  • ノンルートで実行する時は、rsyncに--dry-runオプションを付けて、実際にはコピーしないようにする。ついでに、必要ならば実行コマンドの頭にsudoをつけてやることにします。
	#まず、ルートユーザーかどうかのフラグを建てます。
	is_ROOT = True
	#is_ROOT = False

	# 使うコマンドを定義します
	# この時、sudoが必要なコマンドは、need_dusoというリストに
	# 放り込みます

	need_sudo = []

        # mountは、sudoしないといけません
        mount_cmd = ["/bin/mount", "-v"]
        need_sudo.append(mount_cmd)
 
        # rsyncは、dry-runですが、sudoする方がいいです
        rsync_cmd = ["/usr/bin/rsync","-av","--delete"]
        need_sudo.append(rsync_cmd)

        # lscpは、sudoする必要がありません
        lscp_cmd=["/usr/bin/lscp","-r","-n1",source_volume]

	# .....................................

	# 全てのコマンドの定義が終ったら、
	# is_ROOTフラグを見て、必要な変更をします
        if (is_ROOT == False):
            rsync_cmd.append("--dry-run")
            for x in need_sudo:
                x.insert(0,"sudo")

コマンドを定義する時にいちいちif文を使うより、メモリを富豪的に使い捨てすることになっても、リストを使って後でまとめて処理する方が、ソースの可読性は良くなるように思います。さらに、実運用はrootで行うので、if文を一回評価するだけのコストで済みます。コマンド定義の度に、if文で条件判断すよりも場合によってはコストが低くなります。

今回は、折角is_ROOTを設定したので、これを見てマウントポイントも変更するようにしました。将来は、実行時に動的にis_ROOTの値を取得するようにしたいです。