【Python】コマンドラインで入力した引数を取得する | ジコログ

【Python】コマンドラインで入力した引数を取得する

【Python】コマンドラインで入力した引数を取得する プログラミング
python args_test.py 'hikisuu'

args_test.pyプログラムでどうやって引数「hikisuu」を取得するのか?
この記事では、このことを解説していきます。

本記事の内容

  • Pythonにおけるコマンドライン引数の取得方法
  • sys.argvによるコマンドライン引数の取得
  • 【参考】PHPにおけるコマンドライン引数の取得

それでは、上記に沿って解説していきます。

Pythonにおけるコマンドライン引数の取得方法

Pythonでコマンドライン引数を取得する方法は、主に以下の2つが存在します。

  • sys.argv
  • argparse

両方ともPythonの標準ライブラリで対応可能です。
そのため、別途ライブラリをインストールする必要はありません。

じゃあ、どちらを使えばいいのでしょうか?
その判断基準は、「コマンドラインのプログラムにどこまで重きを置くか?」です。
コマンドラインで動くプログラムの役割・目的に関わりますね。

第三者が直接触るようなプログラムであれば、argparseを使った方がよいでしょう。
しかし、関係者だけが利用するCLIツールやバッチで動くだけのプログラムであれば、sys.argvで十分です。

簡単に言うと、製品レベルで作りこみたいなら、argparseを選択。
そうでないなら、sys.argvを選択。

そうなってくると、どうでしょうかね。
今時、コマンドラインで動くプログラムを納品なんてありえますか?
個人的には、そんなことを経験したことがありません。

ローカルPCで動くGUIアプリなら、何度かありました。
でも、コマンドライン用のプログラムの納品を経験したことはありません。

以上より、個人的には「sys.argv」で事足ります。
そして、大抵のプログラマーもそうだと思います。

よって、今回はsys.argvによるコマンドライン引数の取得を解説していきます。

sys.argvによるコマンドライン引数の取得

まずは、Pythonプログラムのコードから確認します。

args_test.py

import sys

args = sys.argv
print(args)

これだけです。
そして、このプログラムを冒頭で示したコマンドで実行します。

実行した結果は以下。

>python args_test.py 'hikisuu'
['args_test.py', "'hikisuu'"]

この結果を見ると、おおよそはわかるでしょう。
「sys.argv」にすべての入力した値(pythonコマンド以外)がリスト形式で入ります。
では、今度は入力する引数を増やしてみます。

>python args_test.py 'hiki1' 'hiki2' 'hiki3'
['args_test.py', "'hiki1'", "'hiki2'", "'hiki3'"]

入力した引数を個別に取得してみましょう。
先ほどのコードを変更して、次のようなプログラムを用意します。

args_test_2.py

import sys

args = sys.argv
print("program:" + args[0])
print("argument:" + args[1])

実行した結果は以下。

>python args_test_2.py 'hikisuu'
program:args_test_2.py
argument:'hikisuu'

簡単ですね。
これで、sys.argvによるコマンドライン引数の取得ができるようになりました。

以下では、同じように引数を取るPHPの例を載せておきます。

【参考】PHPにおけるコマンドライン引数の取得

PHP使いの人は、「同じだ!!」と思ったはずです。

args_test.php

<?php

print_r($argv);

?>

PHPの場合は、変数$argvにすでに値がすべて入っています。
これを実行した結果は以下。

# php args_test.php 'hikisuu'                                                                                      
Array
(
    [0] => args_test.php
    [1] => hikisuu
)

PHPの場合は、配列に値が入る形です。
Pythonの場合と同じく、最初にプログラムファイル名が来ています。

タイトルとURLをコピーしました