日中はまだまだ厳しい残暑が続き、
そのような作業の際の便利なBGMに、
手元では、
既存スクリプトの問題点
最近のLinux環境では
以前の記事でも紹介したように、
このスクリプトでは、
$ radiru_rec.py -t 'ラジオ英会話「スペシャル・ウィーク」_1' r2 8/27 6:45 7:00 channel:r2 begin time:08/27/2012 06:45 duration(m):15 title:ラジオ英会話「スペシャル・ウィーク」_1 at 06:45 08/27/2012 -f /home/kojima/radiru_scripts/18566 warning: commands will be executed using /bin/sh job 102 at Mon Aug 27 06:45:00 2012
上記実行例に示すように、
radiru_
$ radiru_rec.py -t 'ラジオ英会話「スペシャル・ウィーク」_2' r2 8/28 6:45 7:00 $ radiru_rec.py -t 'ラジオ英会話「スペシャル・ウィーク」_3' r2 8/29 6:45 7:00 $ radiru_rec.py -t 'ラジオ英会話「スペシャル・ウィーク」_4' r2 8/30 6:45 7:00 ....
もちろん、
また、
$ atq 102 Mon Aug 27 06:45:00 2012 a kojima 103 Tue Aug 28 06:45:00 2012 a kojima 104 Wed Aug 29 06:45:00 2012 a kojima 105 Thu Aug 30 06:45:00 2012 a kojima $ at -c 102 #!/bin/sh # atrun uid=1000 gid=100 # mail kojima 0 umask 22 KDE_MULTIHEAD=false; export KDE_MULTIHEAD ... #!/bin/sh sleep 10 mkfifo /tmp/fifo_18566 file=/home/kojima/MP3/ラジオ英会話「スペシャル・ウィーク」_1-`date +"%F-%H-%M"`.mp3 ... $ atrm 102
この作業も結構手間なので、
radiru_rec.pyの再設計
ラジオ第二の語学講座は、
一方、
これらさまざまな番組構成に柔軟に対応するにはどのような方法が簡単かつ汎用的でしょう? 当初は、
「毎週水曜日の20:00」
それらをあれこれ考えていくうちに、
たとえば、
一方、
このように整理した結果、
コーディング
基本的なアイデアはまとまったので、
前節で考えた4つの新機能程度なら、
- 繰り返し単位を毎日にする:-d(--daily)
- 繰り返し単位を毎週にする:-w(--weekly)
- 繰り返し回数を指定する:-r(--repeat)
- 録音するファイル名を指定する:-t(--title)
- ファイル名に付加する連番を指定する:-n(--number)
このようなコマンドラインオプションを解析する機能は、
1 #! /usr/bin/python
2 # -*- coding: euc-jp -*-;
3
4 import argparse
5
6 def get_args():
7 parser = argparse.ArgumentParser(description='らじる☆らじる録音スクリプトビルダー')
8 parser.add_argument('-d','--daily', action='store_true')
9 parser.add_argument('-w','--weekly', action='store_true')
10 parser.add_argument('-t', '--title')
11 parser.add_argument('-n', '--number')
12 parser.add_argument('-r', '--repeat')
13 parser.add_argument('rec_data', nargs='*')
14 return parser.parse_args()
15
16 def main():
17 params = get_args()
18
19 print params
20
21 if __name__ == "__main__":
22 main()
6行目からのget_
argparseモジュールでは、
argparseモジュールの詳細はPythonのオンラインドキュメント等に譲りますが、
こうして作ったパーサオブジェクトでparse_
実際に、
$ python argtest.py -t myprog -d -r5 Namespace(daily=True, number=None, rec_data=[], repeat='5', title='myprog', weekly=False) $ python argtest.py -w -r5 -n10 -t myprog2 r2 8/28 6:45 15m Namespace(daily=False, number='10', rec_data=['r2', '8/28', '6:45', '15m'], repeat='5', title='myprog2', weekly=True)
この例ではparamsオブジェクトの内容がまとめて表示されていますが、
argparseモジュールの面白いところは、
$ python argtest.py -h usage: argtest.py [-h] [-d] [-w] [-t TITLE] [-n NUMBER] [-r REPEAT] [rec_data [rec_data ...]] らじる☆らじる 録音スクリプトビルダー positional arguments: rec_data optional arguments: -h, --help show this help message and exit -d, --daily -w, --weekly -t TITLE, --title TITLE -n NUMBER, --number NUMBER -r REPEAT, --repeat REPEAT
各オプションの説明はadd_
オプションの解析部やヘルプメッセージの表示といった結構手間のかかる処理がargparseモジュールで簡単に書けたので、
ざっと修正したスクリプトをradiru_
$ ./radiru_rec2.py -t 英会話タイムトライアル -n101 -d -r5 r2 9/3 8:30 10m 英会話タイムトライアル_101,r2, 2012-09-03 08:30:00,10 warning: commands will be executed using /bin/sh job 61 at Mon Sep 3 08:30:00 2012 英会話タイムトライアル_102,r2, 2012-09-04 08:30:00,10 warning: commands will be executed using /bin/sh .... 英会話タイムトライアル_105,r2, 2012-09-07 08:30:00,10 warning: commands will be executed using /bin/sh job 65 at Fri Sep 7 08:30:00 2012 $ ./radiru_rec2.py -t 日曜カルチャー「時代の音」 -n1 -w -r4 9/2 20:00 21:00 日曜カルチャー「時代の音」_1,r2, 2012-09-02 20:00:00,60 warning: commands will be executed using /bin/sh job 74 at Sun Sep 2 20:00:00 2012 日曜カルチャー「時代の音」_2,r2, 2012-09-09 20:00:00,60 ... 日曜カルチャー「時代の音」_4,r2, 2012-09-23 20:00:00,60 warning: commands will be executed using /bin/sh job 77 at Sun Sep 23 20:00:00 2012
ざっと見る限りでは、
予約確認/削除スクリプト
最初にも紹介したように、
これらの作業を1つのコマンドでまとめて行えるように、
$ ./radiru_check.py 61 r2 英会話タイムトライアル_101.mp3 9/3(月) 08:30:00 10m 62 r2 英会話タイムトライアル_102.mp3 9/4(火) 08:30:00 10m ... 72 r2 日曜カルチャー「時代の音」_3.mp3 9/17(月) 20:00:00 60m 73 r2 日曜カルチャー「時代の音」_4.mp3 9/24(月) 20:00:00 60m $ ./radiru_del.py 61 62 target script:60 delete que_id:62 filename:/home/kojima/radiru_scripts/60 target script:61 delete que_id:63 filename:/home/kojima/radiru_scripts/61 $ ./radiru_check.py 63 r2 英会話タイムトライアル_103.mp3 9/5(水) 08:30:00 10m 64 r2 英会話タイムトライアル_104.mp3 9/6(木) 08:30:00 10m ... 72 r2 日曜カルチャー「時代の音」_3.mp3 9/17(月) 20:00:00 60m 73 r2 日曜カルチャー「時代の音」_4.mp3 9/24(月) 20:00:00 60m
これら3種のスクリプトで
今回紹介したスクリプト類はPlamo Linux wikiの筆者の日記のページに置いておきますので、
動作確認は手元のPlamo Linux環境でしか行っていませんが、
最近では、
これからの季節、