こんにちは、挑戦するエンジニア のり ですよ。
みなさんは、Pythonのプログラムを作るときに
実行するタイミングでプログラムに値を渡したいことってありませんか?
実行時にプログラムに渡す値を、「実行引数」と呼びます。
今回は、Pythonで実行引数を使う方法を解説します。
始めに
この記事では、Pythonのプログラムにsys.argvを使って
「実行引数」を渡す方法を解説します。
この記事を読んでいただくことで、
コンソールやバッチファイルからPythonのプログラムを実行する際に
実行引数を渡す方法を知っていただくことが出来ます。
筆者の環境(Windows11 23H2、Python3.12)での手順を紹介します。
また、sys.argvはPython標準で使えるため追加でインストールする必要はありません。
ぜひ、挑戦してみてください!
sys.argvを使ったサンプルプログラム
Pythonのプログラムで実行引数を取得するときに、使うのが「sys.argv」です。
「sys.argv」には、プログラム実行時に渡された実行引数がlist形式で格納されています。
どのようにして、実行引数に設定された値を取ればよいか、次のプログラムを参考にしてください。
""" 実行引数サンプルプログラム
"""
import sys
argv :list = sys.argv
argv0 :str = sys.argv[0]
argv1 :str = sys.argv[1]
argv2 :str = sys.argv[2]
argv3 :str = sys.argv[3]
argv4 :str = sys.argv[4]
print('argv=' + str(argv))
print('argv0=' + argv0)
print('argv1=' + argv1)
print('argv2=' + argv2)
print('argv3=' + argv3)
print('argv4=' + argv4)
このプログラムでは、実行引数を受け取って、コンソールに値を表示します。
変数argv には、sys.argvからプログラムが受け取った引数を、list形式でそのまま受け取ります。
変数argv0 ~ 変数argv4 はそれぞれ、引数の0個目から4個目までを一つずつ受け取ります。
その後、それぞれprint命令でコンソールに値を表示します。
この時、実行時に指定されていない実行引数を取得しようとすると、エラーが発生します。
例えば、実行引数3個で実行する場合、実行引数4個目を取得しようとするとエラーが発生します。
プログラムを作る場合は、気を付けたいところです。
実行引数は、sys.argv(list型)に格納される。
次は、サンプルプログラムの動作結果を見ていきましょう。
サンプルプログラムの動作結果
早速、プログラム実行してみた結果です。
実行引数は、数字でも文字でも渡せます。
それだけでなく、間にスペースを入れたもの、環境変数でも渡せます。
この実行結果では、まずsetコマンドで環境変数「hikisu」に値を設定しています。
それから、pythonに実行引数を付けて実行します。
実行結果を見るとわかりますが、0個目の実行引数(argv[0])は実行プログラム名になります。
argv[0]で実行プログラム名を取得できる。
それでは、それぞれ実行引数で渡すときの注意点を見ていきましょう。
まずは、実行引数に数字を渡す場合の説明です。
実行引数に数字を渡す場合
実行引数に数字を渡す場合、実行結果のように数字を書けば渡せます。
カンマが入った「1,234」や、小数点付きの「123.4」でも問題ありません。
渡した後は文字列型(str)になるので、受け取ったあと使うプログラムで配慮が必要です。
数字でも受け取った後は、文字列型(str)になる。
次は、実行引数に文字を渡す場合の説明です。
実行引数に文字を渡す場合
実行引数に文字を渡す場合、実行結果のように文字を書けば渡せます。
数字と同じく、渡した後は文字列型(str)になります。
数字だけでなく、文字も実行引数に指定できる。
次は、実行引数にスペースが混ざった文字列を渡す場合の説明です。
実行引数にスペースが混ざった文字列を渡す場合
実行引数にスペースが混ざった文字列を渡す場合、両端を「”(ダブルクォーテーション)」でくくる必要があります。具体的には、実行結果のように書けば1つの実行引数としてプログラムに渡すことができます。
文字と同じく、渡した後は文字列型(str)になります。
スペースが混ざった文字列を渡す場合、両端を「”(ダブルクォーテーション)」でくくる。
次は、実行引数に環境変数を渡す場合の説明です。
実行引数に環境変数を渡す場合
実行引数に環境変数を渡す場合、環境変数名を書きます。
環境変数名の両端に「%」を付ける必要があります。
これは、Windowsのコマンドプロンプトやバッチファイルを使用するときの書き方です。
文字と同じく、渡した後は文字列型(str)になります。
環境変数名の両端に「%」を付けて指定する。
次は、実行引数に関する制限事項です。
実行引数に関する制限事項
これまでの説明で、なんでもありに思える実行引数ですが、制限事項もあります。
コマンドプロンプトで使用できる文字列(コマンド全体)の長さに制限があります。
Microsoftのホームページによると次の通りです。
コマンド プロンプトで使用できる文字列の最大長は 8191 文字です。
環境変数には値の最大サイズがあります。
Microsoftのホームページによると次の通りです。
ユーザー定義環境変数の最大サイズは 32,767 文字です。
https://learn.microsoft.com/ja-jp/windows/win32/procthread/environment-variables
それでも、制限さえ超えなければ、引数50個でも動作します。
実行引数には、コマンドの最大長の制限がある。
まとめ
今回は、sys.argvを使ったPythonで実行引数を使う方法を解説しました。
sys.argvから受け取った実行引数を、実行時に表示するプログラムを通して
sys.argvの使い方を理解する手助けが出来ているとよいのですが。
実行引数を使うことで、作れるプログラムの幅が広がるといいですね。
それでは、今日の解説はこのへんで。
またのお越しをお待ちしております。