これを次のように使用している場合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() が使用するのと同じ形式) が必要です。