Categories: Python

【Python】コマンドライン引数を使ってプログラム起動時に任意の値を渡す方法

この記事では、Pythonのプログラムを起動する際に任意の値を渡すことができるコマンドライン引数の使い方について解説します。

コマンドライン引数は、プログラムが起動するときにコマンドラインからプログラムに渡される値のことを指します。 例えば以下のようにコマンドラインからPythonプログラムを起動した場合、value1value2がコマンドライン引数として main.py に渡されます。

$ python main.py value1 value2

コマンドライン引数を使うことでプログラム起動時のオプションなど作成することができます。

それでは、コマンドライン引数の使い方を見ていきましょう!

コマンドライン引数を渡す

コマンドライン引数を渡すには、ターミナルやコマンドプロンプトでプログラムを起動する際に、指定したPythonファイル名の後に渡したい値をスペース区切りで記述します。

python Pythonファイル名 値1 値2

以下のコードでは、hello100-optionという3つのコマンドライン引数を渡しています。

python script.py hello 100 -option

コマンドライン引数で渡される値は必ず文字列型(str型)として渡されます。 先ほど渡した100も文字列として渡されているので注意してください。

また、オプションとして定義されているコマンドを指定するとそのオプションが適用されてしまいます。予期せぬオプションを実行してしまわないようにコマンドを知っておく必要があります。

以下のリンクに用意されているオプションが掲載されているので確認しておいてください。

外部リンクコマンドラインと環境 — Python ドキュメント

これでプログラム実行時にコマンドライン引数を渡す方法がわかったので、次に渡されたコマンド引数をソースコード内から参照する方法を見ていきましょう。

コマンドライン引数を参照する

コマンドライン引数は、sysモジュールのargvリストから簡単に参照することができます。sysモジュールは、標準ライブラリなのでインポートするだけで使用可能です。

import sys

sys.argv

sys.argvには、以下のように値が格納されています。

argv[0] スクリプト名。フルパス名かどうかはOSによって異なる。
argv[1]以降 コマンドライン引数

例として実際にコマンドライン引数をソースコード内から参照し、出力してみます。以下のコードでは、for文を用いて受け取ったコマンドライン引数を1つずつ出力しています。

main.py

import sys

for i, arg in enumerate(sys.argv):
    print(f'argv[{i}]: {arg}')

上記プログラムをターミナルから起動します。その際、コマンドライン引数をいくつか渡します。

ターミナルやコマンドプロンプトから実行

$ python main.py abc 123 -option
argv[0]: /Users/user/Desktop/Python/main.py
argv[1]: abc
argv[2]: 123
argv[3]: -option

スクリプト名と受け取ったコマンドライン引数を出力することができました。

まとめ

この記事では、Pythonのコマンドライン引数の受け渡し方法を解説しました。

コマンドライン引数を使うことでプログラム起動時のオプションなどを実装することができます。その際は、コマンドライン引数(sys.argv)を解析するargparseモジュールを使用することでより複雑な処理を簡単なコードで実装することができます。

外部リンクArgparse チュートリアル — Python ドキュメント

それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ

ゆうまる

独学でプログラミングを勉強しているおじさん。いろんな言語を勉強したが浅く広くなためあまり仕事につながらない。また忘れっぽいため自分のブログを備忘録としても使っている。産まれてこのかたずっとネコを飼ってる生粋のネコ派。最近お腹が出てきて筋トレに奮闘中!

Recent Posts

【Dart】コンストラクタのデフォルト引数について

Dartのコンストラクタのデフォルト引数…

2週間 ago

【Unity】有料アセットを無料で手に入れる方法

この記事では、Unityの有料アセットを…

4か月 ago

【Python】任意の秒数だけ処理を一時停止する方法【sleep()関数】

この記事では、Pythonで任意の秒数だ…

1年 ago

【Python】Wordの文書の新規作成と読み書き

この記事では、Pythonを使ってWor…

1年 ago

【Python】メタクラスって結局なんなの?

この記事では、Pythonのメタクラスに…

1年 ago