コマンドラインではじめるデータサイエンス ―分析プロセスを自在に進めるテクニック
- 作者: Jeroen Janssens,太田満久,下田倫大,増田泰彦,長尾高弘
- 出版社/メーカー: オライリージャパン
- 発売日: 2015/09/16
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
目次
はじめに
データ解析の時など、
コマンドラインツールを作りたくなることがあります。
自分だけが、その時だけ使う場合は、
適当にスクリプトファイルを作れば良いですが、
他人に使ってもらったり、
長い期間使用して、メンテする場合は、
ちゃんとコマンドラインツールとして作っておくと
コードの寿命が長くなると思います。
pythonにはそのような
自作コマンドラインツールを作るツールなどが、
豊富に準備されているので、
今回はそれらのツールを使った
pythonコマンドラインツールの作り方について説明したいと思います。
コマンドラインオプションツール argparseの使い方
pythonのデフォルトモジュールである
argparseは、コマンドラインツールに
重要なコマンドラインオプションのパーサモジュールです。
unixのツールによくあるハイフン+記号のオプション
のようなオプション指定のシステムと、
その使い方を示したヘルプを自動生成してくれます。
argparseのサンプルプログラム
下記はargparseのサンプルプログラムです。
#!/usr/bin/env python # -*- coding: utf-8 -*-:q import argparse parser = argparse.ArgumentParser(description='argparse sample.') #bool オプション parser.add_argument('-e','--error', action='store_true', default=False, help='show error (default: show no error)') #数値 オプション parser.add_argument('-d','--data', type=int, help='data number') #文字列オプション parser.add_argument('-s','--str', type=str, help='data name') args = parser.parse_args() print args
argparseは大きく分けて3つの処理に分けられれるため、
それぞれの処理について説明します。
1 パーサの生成
まずはじめに下記のように、argparseをインポートして、
コマンドラインオプション用のパーサを作ります。
引数のdescriptionは、後述するヘルプ表示をした時の、
スクリプトの概要説明文になります。
import argparse parser = argparse.ArgumentParser(description='argparse sample.')
2 コマンドラインオプションの追加
続いて、使用するコマンドラインオプションを追加します。
boolや数値、文字列など、基本的なデータを
コマンドラインオプション経由で指定することができます。
bool型のオプション
下記のように設定することで、bool型のオプションを設定できます。
parser.add_argument('-e','--error', action='store_true', default=False, help='show error (default: show no error)')
上記のコードの場合、-eを付けることでerrorという変数をTrueにすることができます。
-eをつけた時に、errorをFalseにしたい場合は、action='store_false'とします。
defaultはオプションを指定しなかった時のerrorの値です。
helpは後述のようにヘルプを表示させた時の、
オプションの説明になります。
下記のようにオプションを指定することで
error変数がTrueになっているのがわかります。
$ python argparseSample.py -e
Namespace(data=None, error=True, str=None)
数値型のオプション
下記は数値オプションです。
parser.add_argument('-d','--data', type=int, help='data number')
type引数に型を指定することで、
下記のように型以外の引数を与えた時にエラーを返してくれます。
$ python argparseSample.py -d 20.0
usage: argparseSample.py [-h] [-e] [-d DATA]
文字列型のオプション
最後がコマンドラインオプションのパース文です。
parser.add_argument('-s','--str', type=str, help='data name')
基本的に先ほどの数値と同じです。
下記のように使用できます。
$ python argparseSample.py -s hoge
Namespace(data=None, error=False, str='hoge')
3. コマンドラインオプションのパース
最後は受け取ったコマンドラインオプションをパースします。
args = parser.parse_args()
args変数の要素として、
args.errorやargs.data、args.strが格納され、
コードに使用することができます。
ヘルプの表示
argparseの素晴らしい所は
コマンドラインツールのヘルプを自動生成してくれる所です。
先ほどのサンプルコードを-hのオプションを指定すると、
下記のようにヘルプが表示されます。
$python argparseSample.py -h
usage: argparseSample.py [-h] [-e] [-d DATA] [-s STR]
argparse sample.
optional arguments:
-h, --help show this help message and exit
-e, --error show error (default: show no error)
-d DATA, --data DATA data number
-s STR, --str STR data name
コードをドキュメント化出来て、
すごく便利ですね。
Pythonからシェルコマンドを実行する方法
コマンドラインツールを作っていると、
すべてpythonでやるのではなく、
シェルコマンドを使って、
ファイルの検索やコピー、削除などをしたくなります。
そこで自作のpythonコードからシェルコマンドを駆使する方法を説明します。
pythonからシェルコマンドを利用する場合は、
osモジュールを使う方法がかつては一般的でしたが、
osモジュールは将来的に廃止される予定らしいので、
現在はsubprocessというモジュールを使います。
このsubprcessは新しいプロセスを生成して処理を実行する
pythonのデフォルトモジュールです。
subprocessを使ってシェルコマンドを実行する方法は
下記のようにいくつかあります。
call関数 シェルコマンドを実行する
シェルコマンドを実行するのみなら、
call関数が便利です。
引数にシェルコマンドを文字列として指定し、
shell=Trueとすればコマンドを実行してくれます。
コマンドが終了するまで待つようになるので注意しましょう。
import subprocess cmd = "ls" subprocess.call( cmd, shell=True )
check_output関数 シェルコマンドの返り値を利用する
シェルコマンドの返り値を利用したい場合は、
check_output関数を使います。
import subprocess cmd = "ls" ret=subprocess.check_output( cmd, shell=True ) print ret
check_call関数 シェルコマンドの終了を待つ
シェルコマンドの処理が終わったことをチェックしたい場合は
check_call関数を使います。
無事コマンドが終了すれば、返り値は0になるはずです。
エラーの場合は、CalledProcessError例外が出されます。
import subprocess cmd = "ls" ret = subprocess.check_call( cmd ) print ret
参考資料
コマンドラインではじめるデータサイエンス ―分析プロセスを自在に進めるテクニック
- 作者: Jeroen Janssens,太田満久,下田倫大,増田泰彦,長尾高弘
- 出版社/メーカー: オライリージャパン
- 発売日: 2015/09/16
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る