コマンドライン引数とは
コマンドライン引数とは、コンピュータのコマンド入力画面(コマンドライン)からプログラムを起動する際に指定する文字列のこと。また、これをプログラム側で受け取った変数などの値。
コマンドライン引数とはmain 関数の引数のことです。 実行するときに、 コマンドラインからコマンドライン引数に値を与えることができます。
>>> ls -a
↑ココ
Pythonでコマンドライン引数を受け取る
Pythonでコマンドライン引数を受け取るには主に3つの方法があります。
-
sys.argv
を使う -
argparse
を使う -
click
を使う
です。
sys.argv
最も認知されている(と思う)方法です。Pythonの標準ライブラリのsysを使用し取得します。
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機能や型の指定などができる。扱いはクセがある。
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
ちなみに、click
、Flask
、jinja
は同じプロジェクト。
# インストール
pip install click
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
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 が便利すぎた