Python で引数処理! docoptの使い方

pythonで引数処理を行う方法を伝授しようと思います。

引数を処理する方法として、自分でゴリゴリ書くやら、他のツールを使うやらいくつか方法があると思いますが、
最近docoptという強力なツールを発見して、とても開発が捗っています。

今回はdocoptの使いかたをみていきましょう。

 

docoptの使い方

docoptはpythonスクリプトの上部にコメントとして使い方など必要事項を記述すると、docopt側で勝手にそのコメントを解析して、引数のオプションを取ってきてくれる優れものです。

文字で長々説明するよりも例を見せた方が早いと思うので、以下にdocoptのコメント部分の例を紹介します。

このように、pythonスクリプトの上部にコメントとしてusage:とoptions:を記述します。

わざわざoptionをpythonの文法にしたがって記述するのではなく、このように人間がパッとみてもわかりやすいような形式で記述できるところがdocoptの魅力だと思います。

では、このコメント部のルールを以下に説明していきます。

 

docopt コメントのルール

基本的に使用できるオプションは

  • オプションの指定のみ( “-h” のような引数なしのオプション)
  • 引数を伴うオプション( “-n 3” のように引数を伴うオプション)
  • リストを伴うオプション( “-l hoge,fuga piyo” のようにリストをカンマ区切りで渡すオプション)

の3種類となります。また、引数の種類として、

  • 必須の引数
  • 任意の引数

を指定する事ができます。

使用できる記号

( ) オプションを記述する。カッコで囲まれたオプションは必須。
[ ] オプションを記述する。カッコで囲まれたオプションは任意。
| 引数を並列して記述できる。
< > 引数を記述する。
引数がリスト形式である事を示す。< >の後に記述する。

 

コメントの解析

docoptでオプションを解析するためには以下のように記述します。

argsには辞書形式で値が返されます。

例えば、戻り値を解析するためには以下のようにします。

 

docoptのサンプルコード

サンプルコードで動作をみてみましょう。

 

例えば、上記のようなサンプルコード test.py を作成したとします。
このスクリプトに引数を渡して実行してみます。

 

実行結果は以下のようになります。

引数のみのオプション(-b,-h)はbool型で、
リスト形式の引数をとるオプション(-l)はちゃんとリスト形式で値が戻ってきています。

 

引数が正しくなかった場合

ちなみに、-hを指定したり、必須オプション(-r)を記述しなかった場合にはusage:が表示されます。

 

例えば-oを指定して、引数を記述しなかった場合。

 

以下のように-oには引数が必要です。というメッセージとともにusage:が表示されます。

簡単ですね。

 

 

以上、docoptの使い方でした。