Python で起動したアプリケーションは、sys.argv に引数が格納されています。型は文字列のリストで、[0]がモジュール名、[1]以降が引数となります。
# sample.py # 引数を出力するだけのソースコード import sys print(sys.argv) # 引数を与えてsample.pyを実行 > python sample.py -s src.txt --dst dst.xml ['sample.py', '-s', 'src.txt', '--dst', 'dst.xml']
argparse はこの引数を解析するためのライブラリです。
以下は argparse を用いたプログラムの実装例です。このプログラムでは、2つのファイル名を引数として取得します。
# convert.py import argparse __version__ = '1.0.0' def main(): # parserを作成 parser = argparse.ArgumentParser(description='Convert file') parser.add_argument('-v', '--version', action='version', version=('%(prog)s ' + __version__)) parser.add_argument('-s', '--src', metavar='src', type=str, help='source file name') parser.add_argument('-d', '--dst', metavar='dst', type=str, help='output file name') # sys.argvをparseし、引数を取得 args = parser.parse_args() # 引数を使った何らかの動作 print(args.src) print(args.dst) if __name__ == '__main__': main()
実行例です。
> python convert.py -s src.txt --dst dst.xml src.txt dst.xml
また、バージョン表示やヘルプ表示も可能です。
# バージョン表示 > python convert.py -v convert.py 1.0.0 # ヘルプ表示 > python convert.py -h usage: module1 [-h] [-v] [-s src] [-d dst] Convert file optional arguments: -h, --help show this help message and exit -v, --version show program's version number and exit -s src, --src src source file name -d dst, --dst dst output file nameargparse は豊富な機能を備えているので、引数解析部分の車輪の再発明を回避することができます。
また、argparse を使うことで、ヘルプなどの基本コマンドの統一にもつながります。
引数を用いるコマンドラインアプリでは、argparse を使うことが推奨されます。
以下余談です。
Python には元々、getopt という C言語の同名ライブラリを模したモジュールと、よりモダンな optparser がありました。
しかし、optparser よりも更に高機能な引数解析が必要となり、argparse が作成されました。標準モジュールが似た機能のモジュールを複数持ったことにより、混乱もあったものと思われます(https://www.python.org/dev/peps/pep-0389/)。
argparse がリリースされた 3.2 以降(Python 2 では 2.7以降)は、optparser は非推奨となっています。
0 件のコメント:
コメントを投稿