本記事では、Pythonのコマンドライン引数について解説していきます。
Pythonのコマンドライン引数は、スクリプトを実行する際にプログラムに渡されるパラメータです。
コマンドライン引数は、プログラムへの特定の入力を提供するために使用されます。
Pythonでコマンドライン引数を使うメリットとは?
Pythonのコマンドライン引数は、プログラムの汎用性を保つのに役立ちます。
例えば、CSVファイルを処理するプログラムを書くとしましょう。
コマンドラインからCSVファイル名を渡せば、どんなCSVファイルに対してもプログラムが動作します。
これによって、プログラムは疎結合になり、保守が容易になります。
コマンドライン引数のもう一つの利点は、セキュリティの強化もあります。
例えば、データベースにデータを保存するプログラムがあるとします。
もし、データベースの認証情報をスクリプトや何らかの設定ファイルに保存すれば、そのファイルにアクセスできる人なら誰でもアクセスして実行することができるようになります。
しかし、ユーザー/パスワードがコマンドラインの引数として提供されていれば、ファイルシステムには存在しないので、プログラムはより安全なものとなる。
Pythonでコマンドライン引数の渡し方
ターミナルからpythonスクリプトを実行する場合、スクリプト名の後に引数を渡すだけです。
引数は空白文字で区切られます。
$ python main.py arg1 arg2
Pythonスクリプトでコマンドライン引数を読み取る方法
Pythonスクリプトのコマンドライン引数を読み取り、解析するモジュールとして、3つのモジュールがよく知られています。
- sys.argv
- getopt
- argparse
sysモジュールを使ったPythonコマンドライン引数の読み込み
コマンドライン引数は,sysモジュールの変数 argv
に格納されます.この変数は,文字列のリストとなっています。
このリストからコマンドライン引数を読み出して、プログラム内で使用することができます。
スクリプト名も sys.argv
変数に格納されているコマンドライン引数の一部であることに注意してください。
import sys
if len(sys.argv) != 2:
raise ValueError('Please provide email-id to send the email.')
print(f'Script Name is {sys.argv[0]}')
email = sys.argv[ 1 ]
print(f'Sending test email to {email}')
-
getoptモジュールを使用したコマンドライン引数のパース
Pythonのgetoptモジュールは、Unixのgetopt()関数と似たような働きをします。
このモジュールは、Unixの多くのコマンドと同様に、スクリプトにオプションとその値を受け入れさせたい場合に役立ちます。
このモジュールは sys.argv と連動して、コマンドライン引数をパースし、オプションの値を多プルのリストとして抽出します。
import getopt
import sys
argv = sys.argv[ 1:]
opts, args = getopt.getopt(argv,'x:y:')
print(f'Options Tuple is {opts}')
print(f'Additional Command-line arguments list is {args}')
この記事もチェック:Pythonのmapメソッドの使い方|ラムダ関数や引数が複数の場合の使い方も解説
argparseモジュールを使ったコマンドライン引数のパース
Pythonのargparseモジュールもコマンドライン引数の解析に利用できます。
argparseモジュールには多くのオプションがあります。
- 位置引数
- ヘルプメッセージ
- 引数のデフォルト値
- 引数のデータ型を指定する、などなど。
以下はサンプルのコードです。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("language")
parser.add_argument("name")
args =parser.parse_args()
if args.language == 'Python':
print("I love Python too")
else:
print("Learn Python, you will like it")
print(f'Hello {args.name}, this was a simple introduction to argparse module')