以前からPythonでバッチ処理を書くことは多くて、書き方の最適解を模索していたのだけどだいたい固まってきたのでメモ。
シェルを叩く
コマンドラインに表示したいときは
subprocess.call(command, shell=True)
コマンドラインに表示したくないときは
log = subprocess.check_output(command,shell=True,stderr=sp.STDOUT)
パス名などの環境変数にすばやくアクセスする
クラスを使うと便利。ドットアクセスで記述でき、ローカル変数として取ってくる(後述)のも1行で済むので楽。
.format()を使いこなす
シェルに投げるコマンド文を生成するとき、.format(**locals())を使って文字列中に変数を楽に埋め込める。
パス名などの環境変数をグローバルスコープに書いてしまうとlocals()では引っ張ってこれないが、クラスに纏めておけば、そのクラスのインスタンスを一つローカルスコープに宣言するだけでlocals()から引っ張ってこれるので楽ちん。
サンプル
以前書いたやつ。1枚絵とオーディオファイルからffmpegを使って動画を自動で作成する。
上記のTipsの書き方参考にどうぞ。
https://gist.github.com/kuguma/d9b0e4ba3324958aa7909b600130ece1
0 Comments