Pythonでコマンドライン引数をsysモジュールを取得して処理する方法について解説します。
コマンドライン引数
コマンドライン引数とは、Pythonのプログラム実行時にコマンドラインで実行する際、引数を指定することで、プログラム実行条件を変えたりといった場合に使用する引数のことを言います。
> python test.py 引数1 引数2 ...
上記の例では「引数1」や「引数2」がコマンドライン引数です。…と書いているように列挙していくことができます。
以降では、sysモジュールを使ってPythonプログラムでコマンドライン引数を取得する最もシンプルな方法の例を紹介します。
Pythonでのコマンドライン引数取得方法
sysモジュールを利用する方法
sysモジュールを利用してコマンドライン引数を取得する簡単な例を以下に示します。
import sys def main(): # コマンドライン引数を取得する args = sys.argv # コマンドライン引数を表示する print(f'args: {args}, {type(args)}') # コマンドライン引数の数を調べる print(f'len(args): {len(args)}') # コマンドライン引数を順番に処理する for i, arg in enumerate(args): print(f'arg[{i}] = {arg}') if __name__ == '__main__': main()
【実行例】 >python comman_line_arguments.py arg1 arg2 arg3 args: ['comman_line_arguments.py', 'arg1', 'arg2', 'arg3'], <class 'list'> len(args): 4 arg[0] = comman_line_arguments.py arg[1] = arg1 arg[2] = arg2 arg[3] = arg3
コマンドライン引数は、実行時にsys.argvに設定されます。上記のプログラム名ではその値をargsという変数に代入して使用しています。
出力しているようにsys.argvはlist型で、0番目にプログラム名が入り、1番目以降にコマンドライン引数が入るので覚えておきましょう。
list型のため、上記例のようにfor文を使って順次値を取り出して処理をするということが可能です。
上記で紹介しているソースコードについてはgithubにて公開しています。参考にしていただければと思います。
高度なコマンドライン引数処理 argparse
より高度にコマンドライン引数取得を実行したい場合は、argparseモジュールを使用できます。以下の記事にargparseモジュールの基本的な使い方は「argparseを用いたコマンドライン引数の取得方法」にまとめていますので参考にしてみてください。
以前はoptparseというモジュールが使われていましたが、Python3.2から非推奨になりました。optparseは廃止予定でありこれ以上の開発は行われませんので、argparseモジュールの方を使用してください。
optparseの公式ドキュメントのこちらに上記の内容の記載があります。