これを次のように使用している場合getopt
:
import getopt
import sys
opts,args = getopt.getopt(sys.argv,"a:bc")
print opts
print args
opts
空になります。タプルは作成されません。ただし、 を使用するsys.argv[1:]
と、すべてが期待どおりに機能します。それがなぜなのかわかりません。説明したい人はいますか?
sys.argv
( )の最初の要素sys.argv[0]
は、現在実行中のスクリプトの名前です。このスクリプト名は (おそらく) 有効な引数ではないため (また、おそらく a-
またはで始まっていないため--
)、getopt
はそれを引数として認識しません。仕組みの性質上、コマンド ライン フラグではないもの ( orgetopt
で始まらないもの) を検出すると、コマンド ライン オプションの処理を停止します (残りの引数を に入れます)。残りの引数は、プログラムによって処理される項目 (ファイル名やその他の「必須」引数など) であると想定しています。-
--
args
それは設計によるものです。sys.argv[0] は実行中のプログラム名であり、getopt はそれを必要としないことを思い出してください。
ドキュメントから:
コマンド ライン オプションとパラメーター リストを解析します。args は解析対象の引数リストで、実行中のプログラムへの先行参照はありません。通常、これは sys.argv[1:] を意味します。options は、スクリプトが認識したいオプション文字の文字列です。オプションには引数の後にコロン (':'; つまり、Unix の getopt() が使用するのと同じ形式) が必要です。