6

これを次のように使用している場合getopt:

import getopt
import sys

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

opts空になります。タプルは作成されません。ただし、 を使用するsys.argv[1:]と、すべてが期待どおりに機能します。それがなぜなのかわかりません。説明したい人はいますか?

4

2 に答える 2

16

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

于 2009-10-08T20:53:25.247 に答える
7

それは設計によるものです。sys.argv[0] は実行中のプログラム名であり、getopt はそれを必要としないことを思い出してください。

ドキュメントから:

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

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

于 2009-10-08T20:51:45.110 に答える