Document

【Python】ArgumentParserで、実行時にファイルパスをコマンドライン引数にとる方法

今日も新たな知見を得たので忘れないようにまとめます。
Pythonの標準ライブラリであるArgumentParserで、Pythonの実行時に引数を取る方法について勉強しました。

ArgumentParserを使うと、Pythonプログラムの起動時にオプションをセットしたり、ユーザの入力した情報を受け取ったりすることができます。
今回は、Pythonプログラムの実行時に、任意のファイルパスを引数にとるプログラムを紹介します。

とりあえず安定の公式ドキュメントを参照してます。
argparseドキュメント

もくじ

  1. ArgumentParser実装例
  2. 任意のファイルパスを引数にとるPythonプログラム
  3. まとめ

ArgumentParser実装例

簡単なサンプルとして、実行時にファイルパスを引数に取るプログラムを紹介します。

ソースコードはこちら。

import argparse

#ArgumentParserを使ってファイルのパスを引数に取る
def get_args():
    parser = argparse.ArgumentParser(description='このプログラムの説明')
    parser.add_argument('-f','--file', action='store',
                        help='file path it is written urls', required = True)

    args = parser.parse_args()
    return args.file

def main():
    urls_file_path = get_args()

    #引数で取得したファイルパスが表示される
    print(urls_file_path)

if __name__ == "__main__":
    main()

このコードを引数なしで実行しようとすると、次のようなエラーが返ってきます。

usage: [PythonFileName].py [-h] -f FILE
[descriptionの内容]
[PythonFileName].py: error: the following arguments are required: -f/--file

また、python3 [PythonFileName].py --helpを実行すると、設定した説明文を確認できます。

usage: [PythonFileName].py [-h] -f FILE

optional arguments:
-h, --help show this help message and exit
-f FILE, --file FILE file path it is written urls

任意のファイルパスを引数にとるPythonプログラム

任意のファイルパスを引数にとるPythonプログラムについては、すでに上記で紹介していますので、その詳細について解説していきます。

まず、以下の一文でArgumentParserオブジェクトを生成し、parserという変数に代入します。

parser = argparse.ArgumentParser(description='This is KB checker')

ArgumentParserオブジェクトは、以下のようなクラスオブジェクトです。
先ほどのコードでは、ArgumentParserオブジェクトのdescriptionにプログラムの説明文を設定しました。

class argparse.ArgumentParser(prog=None, usage=None, description=None, epilog=None,
                              parents=[], formatter_class=argparse.HelpFormatter,
                              prefix_chars='-', fromfile_prefix_chars=None, argument_default=None,
                              conflict_handler='error', add_help=True, allow_abbrev=True)

次に、parserに代入したArgumentParserオブジェクトに対して、add_argumentメソッドでオプションを追加しています。
以下の例では、[-f/--file]というオプションで与えられた引数を保存するよう命令しています。

parser.add_argument('-f','--file', action='store',
                    help='file path it is written urls', required = True)

この際、requiredをTrueに設定することで、Pythonプログラムを実行する際に省略できないオプションとして設定しています。
また、helpに書かれた内容が、helpコマンドを実行した際に[-f/--file]オプションの説明として表示されます。

せっかくドキュメントを読んでいるので、add_argumentメソッドの中身についても確認してみます。
このメソッドは、コマンドライン引数がどう解析されるかを定義するメソッドです。
名前かオプション文字列のリスト(file,-f,--file)などのみ省略不可能となってます。

ArgumentParser.add_argument(name or flags...[, action][, nargs][, const]
                            [, default][, type][, choices][, required]
                            [, help][, metavar][, dest])

その他の引数の役割は以下の通りです。

・action:コマンドラインにこの引数があったときのアクション。
・nargs:受け取るべきコマンドライン引数の数。
・const:一部の action と nargs の組み合わせで利用される定数。
・default:コマンドラインに引数がなかった場合に生成される値。
・type:コマンドライン引数が変換されるべき型。
・choices:引数として許される値のコンテナー。
・required:コマンドラインオプションが省略可能かどうか (オプション引数のみ)。
・help:引数が何なのかを示す簡潔な説明。
・metavar:使用法メッセージの中で使われる引数の名前。
・dest:parse_args() が返すオブジェクトに追加される属性名。

詳しくはドキュメントを参照してください。
argparseドキュメント

今回使用しているところで、actionを紹介します。
actionは、コマンドライン引数がどう処理されるかを指定しています。

今回の例では、[store]を使用しています。
これは、受け取った引数の値をただ格納するという設定になります。

まとめ

今回は、Pythonの標準ライブラリであるArgumentParserで、Pythonの実行時に引数を取る方法をまとめました。

ちょっとした作業の自動化スクリプトなんかを書くときに、意外と便利なのがこのコマンドライン引数です。
シンプルな構文にも関わらず、用途や効果がかなり広く、非常に便利です。

ぜひ試してみてください。

COMMENT

メールアドレスが公開されることはありません。