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の値を取得するようにしたいです。