LoginSignup
10
8

More than 3 years have passed since last update.

Pythonでコマンドライン引数の受け取り方

Last updated at Posted at 2020-02-25

コマンドライン引数とは

コマンドライン引数とは、コンピュータのコマンド入力画面(コマンドライン)からプログラムを起動する際に指定する文字列のこと。また、これをプログラム側で受け取った変数などの値。

コマンドライン引数とはmain 関数の引数のことです。 実行するときに、 コマンドラインからコマンドライン引数に値を与えることができます。

>>> ls -a
        ↑ココ

Pythonでコマンドライン引数を受け取る

Pythonでコマンドライン引数を受け取るには主に3つの方法があります。

  1. sys.argvを使う
  2. argparseを使う
  3. clickを使う

です。

sys.argv

最も認知されている(と思う)方法です。Pythonの標準ライブラリのsysを使用し取得します。

args.py
import sys


def main() -> None:
    args = sys.argv
    print(args)


if __name__=='__main__':
    main()

実行

>>> python args.py aaa 123 hoge
['args.py', 'aaa', '123', 'hoge']
メリット デメリット
簡単に記述できる どんな型が来るのかがわからない
Python標準ライブラリである helpがない

argparse

コマンドライン引数専用のPython標準ライブラリ。
Help機能や型の指定などができる。扱いはクセがある。

args2.py
import argparse


def main() -> None:
    parser = argparse.ArgumentParser(description='説明')

    parser.add_argument('description', help='引数の説明')  # 実行時指定しないとエラーになる。
    parser.add_argument('hoge', help='hogehoge')  # 順番が決まっている。
    parser.add_argument('--foo', help='option')  # ハイフンを1~2個つけると実行時指定しなくても良くなる。

    args = parser.parse_args()

    print(args.description)
    print(args.hoge)
    print(args.foo)


if __name__ == "__main__":
    main()

実行

>>> python args2.py -h
usage: aaa.py [-h] [--foo FOO] description hoge

説明

positional arguments:
  description  引数の説明
  hoge         hogehoge

optional arguments:
  -h, --help   show this help message and exit
  --foo FOO    option

>>> python args2.py aaa bbb
aaa
bbb
None

>>> python args2.py aaa bbb --foo 123
aaa
bbb
123
メリット デメリット
機能が豊富 複雑
Helpがある
Python標準ライブラリである

click

Pythonのコマンドラインパーサ。別の言い方で、コマンドライン解析用モジュール。
Python標準ライブラリではないため別途インストールが必要だが、わかりやすさと使いやすさで上記2つを抜いている。そのため、これさえおぼえておけばOK
ちなみに、clickFlaskjinja同じプロジェクト

# インストール
pip install click
args3.py
import click


@click.command()
@click.option('--args', prompt=True, help='説明')
@click.option('--hoge', prompt=True, is_flag=True, help='hogehoge')
def main(args: str, hoge: bool) -> None:
    if hoge:
        print(args)


if __name__ == "__main__":
    main()

実行

>>> python args3.py --args foo --hoge
foo

>>> python args3.py
Args: aaaaa
Hoge [y/N]: y
aaaaa
メリット デメリット
機能が豊富 Python標準ライブラリではない
使いやすい
プロンプトに表示できる
進捗バーも表示できる
パスワード入力を隠すことができる
複数入力もできる

Fire

なにこれめっちゃ楽やん!!!ってやつ。
Googleのプロジェクト

# インストール
pip install fire
args4.py
import fire

def main(args: str, hoge: bool) -> None:
    if hoge:
        print(args)


if __name__ == "__main__":
    fire.Fire(main)   # これにするだけ

実行

>>> python args3.py --args foo --hoge
foo
メリット デメリット
使いやすい Python標準ライブラリではない
helpはDocstringから解析してくれる

参考資料

Pythonでコマンドライン引数を扱う方法(sys.argv, argparse)
Pythonでコマンドライン引数を渡す方法
ArgumentParserの使い方を簡単にまとめた
Python: コマンドラインパーサの Click が便利すぎた

10
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
8