【Python】sysモジュールでコマンドライン引数を使ってみよう!

  • 2019年12月17日
  • 2020年4月3日
  • Python

こんにちは!

皆さんはコマンドライン引数を使っていますか?

コマンドライン引数とは、コマンドを実行する際に、プログラム名の後に続けて入力する文字列が保存される引数のことです。

コマンドライン引数を使用することで、プログラムを変更することなく、プログラムの挙動を変えることができるようになります。

そこで今回は、「sysモジュール」を用いたコマンドライン引数の使用法を紹介していきます。


使用するモジュール

コマンドライン引数を利用するには、「sysモジュール」を使用します。

sysモジュールは、Pythonの標準ライブラリに含まれているのでインストールの必要はありません。


コマンドライン引数の使用法

では早速コマンドライン引数の使用法について見ていきましょう。

プログラム名の後に続けて入力された文字列は、sysモジュールの「argv」に保存されます。

以下のプログラムは、プログラムの後に続けて入力された文字列を出力するプログラムです。

import sys

print(sys.argv)

print(sys.argv[0])
print(sys.argv[1])
print(sys.argv[2])
print(sys.argv[3])

実行コマンド

python3 argv.py abc def ghi

実行結果

['argv.py', 'abc', 'def', 'ghi']
argv.py
abc
def
ghi

コマンドライン引数は、すべて「sys.argv」にリストとして保存されています。

注意すべき点は、sys.argvの最初の要素には、実行ファイルの名前が格納される点です。



コマンドライン引数を使用する際の注意点

コマンドライン引数を使用する際には注意すべき点が1つあります。

それは、コマンドライン引数の個数がプログラムの処理と合わない場合にはエラーになってしまう可能性がある点です。

先ほどのプログラムで、コマンドライン引数の個数が足りない場合の結果を見て見ましょう。

実行コマンド

python3 argv.py abc def 

実行結果

  File "argv.py", line 8, in <module>
    print(sys.argv[3])
IndexError: list index out of range

コマンドライン引数の個数が足りない場合には、上記のようなエラーが出てしまいます。

なので実際にコマンドライン引数を使用する場合は、引数の個数を数えて、個数に応じた分岐処理を行う必要があります。

以下のプログラムは、コマンドライン引数の個数に対応したプログラムです。

import sys

argvlen = len(sys.argv)
print(argvlen)
if argvlen > 0:
    print(sys.argv[0])
if argvlen > 1:
    print(sys.argv[1])
if argvlen > 2:
    print(sys.argv[2])
if argvlen > 3:
    print(sys.argv[3])

実行コマンド

python3 argv.py abc def 

実行結果

argvlen.py
abc
def

これでエラーが出なくなりましたね。


まとめ

いかがでしたか?
コマンドライン引数の使用法について理解できたでしょうか?

コマンドライン引数を使用するには「sysモジュール」の「argv」を使用します。
入力されたコマンドライン引数は、すべて「sys.argv」にリストとして保存されます。
実際に使用する場合には、コマンドライン引数の個数を考慮したプログラムを作成するように心がけましょう。

コマンドライン引数を使用することで、様々なプログラムが書けるようになるので、ぜひ使用法を覚えておきましょう!