2009-10-08 8 views
5

私はgetoptでこれを使用している場合:sys.argvが完全に渡された場合にgetoptが動作しないのはなぜですか?

import getopt 
import sys 

opts,args = getopt.getopt(sys.argv,"a:bc") 
print opts 
print args 

optsは空になります。タプルは作成されません。ただし、sys.argv[1:]を使用すると、すべて正常に動作します。私はそれがなぜあるのか分からない。誰でも気をつけて説明しますか?

答えて

13

sys.argvの最初の要素(sys.argv[0])は、現在実行中のスクリプトの名前です。このスクリプト名は有効な引数ではないため(おそらく-または--で始まることはありません)、getoptはそれを引数として認識しません。 getoptの仕組みの性質上、コマンドラインフラグではないもの(-または--で始まらないもの)が見つかると、コマンドラインオプションの処理が停止し(残りの引数はargsに入ります)これは、残りの引数がプログラムによって処理される項目(ファイル名やその他の "必須"引数など)であると仮定しているためです。

+0

私は今理解しています。ありがとう! – Geo

6

これは仕様です。 sys.argv [0]は実行中のプログラム名であり、getoptはそれを望んでいないことを思い出してください。ドキュメントから

は、コマンドラインオプションと パラメータリストを解析します。引数は実行中のプログラムへの参照である の先頭にはなく、引数 の解析対象です。 通常、これはsys.argv [1:]を意味します。 オプションは、スクリプトがコロン 引数を必要とするオプションで、認識 したいオプション 文字の文字列です(「:」; すなわち、Unixの のgetopt()が使用するのと同じ形式)。

http://docs.python.org/library/getopt.html

関連する問題