この記事で分かること
- Pythonファイル実行時のオプション(引数)とは何かが分かる
- オプション(引数)のPythonファイル内での処理方法が分かる
Pythonでコマンドライン引数を取得する概要
この記事では、Pythonプログラムをコマンドラインから実行した場合に、コマンドライン引数の値をPythonファイル内部のプログラムに反映する方法を説明します。
Pythonファイルを実行する時に、同時に引数(パラメータ)を渡し、内部の処理で、渡されたパラメータを使うといった処理ができるようになります。これによって、Pythonで予めプログラムできないものを処理することができます。
例えば、下記のように、Pythonファイル「test.py」を実行する時、第1引数に「Tommy」という文字列を、第2引数に「hoge」という文字列を入力することができます。
$ python test.py Tommy hoge
或いは、Pythonファイルを実行するユーザーが複数人数居る場合に、ユーザーごとのユーザー名やパスワードは、ユーザーによって変わります。Pythonファイル実行時にどのユーザーがPythonファイルを実行しているかが分かるので、Pythonプログラム処理内部でユーザー名やパスワードを使った処理ができるようになります。
Pythonでコマンドライン引数を取得する前提環境
Pythonで引数を使った実行方法の前提の環境は、下の記事で説明している私の環境と同じ環境で確認しています。
レンタルサーバなどのLinuxサーバを使っている場合は、下の記事でプログラミングする環境の作り方を説明しています。
もし、まだプログラムする環境ができていない方は、先にこちらの記事を読んで、プログラミングできる環境をつくることをおすすめします。
Pythonでコマンドライン引数を取得するサンプルプログラム
サンプルプログラムの作成
ここでは、引数を取得するサンプルプログラムを作成します。手順としては、Pythonのプラグラムファイルを実行する時に引数を入力するように設計を前提として、その引数をプログラムのロジックに取り込めるような関数を定義します。そしてその関数の呼び出すようなMainの処理を実装します。詳細には次のように順番でサンプルプログラムを作成し、説明します。
- ライブラリインポート
- 引数入力を取得する関数の定義
- 定義した関数の実行
1.ライブラリインポート
ここでは、Pythonファイル実行時に指定された引数の値を取得する為に、「sys」ライブラリをインポートしています。
import sys
「sys」ライブラリをインポートする
2.引数入力を取得する関数の定義
今回のサンプルプログラムは、Pythonファイルの実行時にユーザーのユーザー名を第一引数に、パスワードを第二引数に指定されることを想定したつくりにします。
「sys」ライブラリの「argv」と呼ばれる関数で引数全体(ここでは変数「args」と定義している)を取得し、その引数全体はリストで渡される為、変数「args」の2番目の要素をユーザー名として取得、3番目の要素をパスワードとして取得します。また、変数「args」の1番目にはPythonのファイル名が入っています。
def get_input_param():
user = ''
passwd = ''
result = False
# 引数の取得
args = sys.argv
# 引数の個数が足りない場合
if 2 >= len(args):
result = False
else:
result = True
user = args[1]
passwd = args[2]
return user,passwd,result
- 関数「get_input_param」を定義宣言する。
- 変数「user」を空文字で初期化する。
- 変数「passwd」を空文字で初期化する。
- 変数「result」を値「False」で初期化する。
- 変数「args」を 関数「sys.argv」からの戻り値で初期化する。
- リストの要素数が2より小さい場合、次の処理を実施する。
- 変数「result」に値「False」を格納する。
- リストの要素数が2より小さい以外の場合、次の処理を実施する。
- 変数「result」に値「True」を格納する。
- 変数「user」に変数「args」の1番目の要素を格納する。
- 変数「passwd」に変数「args」の2番目の要素を格納する。
- 「user」「passwd」「result」の3つの値を戻り値として返却する。
3.定義した関数の実行
ここでは、先程定義した関数の実行処理を説明します。まず、引数で指定された値をを取得する関数「get_input_param」を呼び出します。関数「get_input_param」の結果が値「False」だった場合は、入力が異常である旨のメッセージを表示し、入力が正常であれば、ユーザー名とパスワードを表示するというプログラムです。
if __name__ == '__main__':
username, password, result = get_input_param()
if False == result:
print("Incorrect input.")
else:
print("User Name: " + username)
print("User Pswd: " + password)
- 変数「username」「password」「result」を関数「get_input_param」からの戻り値で初期化する。
- 変数「result」が値「False」だった場合、次の処理を実施する。
- 文字列「Incorrect input.」を表示する。
- 変数「result」が値「False」以外だった場合、次の処理を実施する。
- 文字列「User Name: 」と変数「username」の内容を表示する。
- 文字列「User Pswd:」と変数「password」の内容を表示する。
サンプルプログラムの実行
ここでは、上で作成したサンプルプログラム「test.py」を実行して、その結果を確認します。引数に設計した通りに入力した時の結果と、引数になにも指定せずにエラー処理結果を確かめる結果の2つの結果を示します。
- サンプルプログラム実行の結果【期待通りの処理】
- サンプルプログラム実行の結果【エラー処理】
1.サンプルプログラム実行の結果【期待通りの処理】
下の結果は、第一引数に文字列「Tommy」、第二引数に文字列「hoge」を指定してPythonファイル「test.py」を実行した際の結果を表しています。User Nameの項目に「Tommy」が、UserPswdの項目に「hoge」が表示されていて、2つの引数が意図通りに表示されていることが分かります。
$ python test.py Tommy hoge
User Name: Tommy
User Pswd: hoge
2.サンプルプログラム実行の結果【エラー処理】
下の結果は、引数なしでPythonファイル「test.py」を実行した際の結果を表しています。引数が2つ未満だとエラー処理(入力が間違っているメッセージを表示)にしているので、エラー処理されていることが分かります。
$ python test.py
Incorrect input.