ここでは、sys.argv
でコマンドライン引数を参照する初歩的な方法を説明しますが、ある程度複雑なコマンドライン引数を扱いたいときは、Python の標準ライブラリの argparse モジュールを使う ことをおすすめします。
コマンドライン引数を参照する
Python スクリプト起動時にコマンドライン引数として渡された値は、sys.argv
で文字列リストの形で参照することができます。
先頭の要素 sys.argv[0]
には、python
コマンドで指定したスクリプト自身の名前が格納されています。
sys.argv
の先頭にスクリプト自身の名前が入っているので、len(sys.argv)
は少なくとも 1 以上の値になります。
コマンドライン引数が正しく指定されていないときに Usage 表示する
下記は、コマンドライン引数を 1 つも指定せずにスクリプトを実行した場合に使い方 (usage) を表示して終了するサンプルです。
スクリプト名を除いてコマンドライン引数を取得する
sys.argv[0]
には自身のスクリプトファイル名が含まれています。
純粋にコマンドライン引数だけを取り出したい場合は、sys.argv[1:]
のようにインデックス 1 以降を取り出してしまうと分かりやすくなります。
コマンドライン引数がひとつも渡されなかった場合は、sys.argv[1:]
は空リストになります。
(おまけ)ハッカー流のコマンドライン引数の処理方法
下記は、高校生ハッカーが主人公のドラマ『ブラッディ・マンデイ』の中で、主人公であるファルコンが使ってた方法です。
なんらかの攻撃ツールを即席で実装してたシーン。
強引に sys.argv
をスライスしてしまって、正しい数のパラメータを指定されていない場合に、ValueError
例外を発生させてしまうやり方です。
なるほどねー
import sys
try:
host, frm, to = sys.argv[1:4]
except ValueError:
print("Usage: %s <host> <from> <to>" % (sys.argv[0]))
sys.exit(1)