Ad
1: 2016-12-24 (土) 13:38:02 njf ソース バックアップ No.1 を復元して編集 2: 2016-12-24 (土) 14:09:37 njf ソース バックアップ No.2 を復元して編集
Line 1: Line 1:
*コマンドライン引数の取得 [#gf1ebe46] *コマンドライン引数の取得 [#gf1ebe46]
-*コマンドライン引数をよりうまくあつかう [#s3231922]+Python実行時のコマンドライン引数は以下のようにして取得できます。 
 + 
 + import sys 
 + 
 + for a in sys.argv: 
 +     print a 
 + 
 +これ「arg_test.py」という名前で保存して実行すると 
 + 
 + $ python arg_test.py a1 a2 a3 a4 
 + arg_test.py 
 + a1 
 + a2 
 + a3 
 + a4 
 + 
 +のように、「sys.argv」に最初に実行しているファイル名、残りにコマンドライン引数が入っています。 
 + 
 +*argparseでコマンドライン引数をよりうまくあつかう [#s3231922] 
 + 
 +簡単なコマンドライン引数の取得なら「sys.argv」で十分ですが、実際のプログラムだと例えば「-h」や「--help」と引数を指定すればヘルプメッセージを出したり、必要な引数がなければエラーを出したりしたくなります。 
 + 
 +ですが、「sys.argv」だけを使って自力でそれらを作ると結構な手間となります。そこで、Pythonにはそれらの機能を実装するのに役立つ「argparse」というモジュールが用意されています。 
 + 
 + # -*- coding: utf-8 -*- 
 + import argparse 
 + 
 + parser = argparse.ArgumentParser() 
 + parser.add_argument("a1", help=u"数値1", type=int) 
 + parser.add_argument("a2", help=u"数値2", type=int) 
 + 
 + args = parser.parse_args() 
 + print args.a1, args.a2 
 + 
 +これを以下のように実行すると、 
 + 
 + $ python arg_test.py 2 5 
 +結果 
 + 2 5 
 +となります。 
 + 
 +なにも引数無しで実行すると 
 + $ python arg_test.py 
 +結果 
 + usage: arg_test.py [-h] a1 a2 
 + arg_test.py: error: too few arguments 
 + 
 +となり、使い方と「引数が少なすぎる」というメッセージを出してくれます。 
 + 
 +二つ目の引数に数値以外を指定すると、 
 + $ python arg_test.py 1 a 
 +結果 
 + usage: arg_test.py [-h] a1 a2 
 + arg_test.py: error: argument a2: invalid int value: 'a' 
 + 
 +このように、ちゃんと第二引数が不正であるというメッセージが出ます。 
 + 
 +さらに 
 + $ python arg_test.py -h 
 +とすると、 
 + usage: arg_test.py [-h] a1 a2 
 + 
 + positional arguments: 
 +   a1          数値1 
 +   a2          数値2 
 + 
 + optional arguments: 
 +   -h, --help  show this help message and exit 
 + 
 +ちゃんとヘルプメッセージが出ます。 
 + 
 +これらの処理を自分で実装するとかなり大変ですが、argparseを使うと数行で実現できます。


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード印刷に適した表示   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom Powered by xpWiki
Counter: 3056, today: 1, yesterday: 1
MenuBar
広告

ログイン

ユーザー名:


パスワード:





パスワード紛失

Portuguese | English | German | Greek | Japanese | Korean | Russian | T-Chinese top
NJF