python optparseレビュー

1896 ワード

今日はPythonコードを見ていますが、optparseモジュールが使われています.その中で、次の一言の返された結果に不思議を感じました.
(options, args) = parser.parse_args()
プログラムのコマンド動作:
tool.py --syntax headphone_element --syntax-options 1 --generate output.xml
私の理解によれば、このargs変数の値は['headphone_element','1','output.xml']であるべきであり、この関数は全部で3つの変数に伝達されるからである.しかし、本当の結果は['output.xml']で、コードでモジュールを呼び出す方法が間違っているのではないかと不思議に思ったが、optparseに関するすべての部分をよく見てみると、公式サイトの呼び出し方法と全く同じで、どうしてエラーが発生したのだろうか.そこで、このoptpraseモジュールをよく理解するのに時間がかかりました.どこかで間違っているに違いない.
やはり1時間近くじっくり読んで、自分が間違っている原因を見つけました.optparseの公式サイトには、option argumentとpositional argumentの2つのキーワードがあります.翻訳するとオプションパラメータと位置パラメータですが、いったい何がオプションパラメータと位置パラメータですか?
オプションパラメータ
パラメータの後ろには、このパラメータと密接に関連するオプションが付いています.このオプションに値がある場合、このパラメータリストからこのオプションの値にアクセスできます.オプションパラメータの例を次に示します.
-f foo
--file foo
位置パラメータ
パラメータリストのオプションパラメータが解析された後に残ったすべてのパラメータ.すなわち,オプションとそれらのパラメータは解析され,パラメータリストから削除された残りの部分である.
たとえば、次の仮定のコマンドラインを考慮します.
prog -v --report report.txt foo bar
-vおよび--reportはオプションです.仮定--reportはパラメータを持っています.report.txtはオプションパラメータです.fooとbarは位置パラメータです.
私が上述した例を見てみましょう.--syntax、--syntax-optionsと--generateはオプションですが、--generateというオプションは前の2つとは違います.--generateはブール値オプションです.
特定のオプションが表示されるかどうかに基づいて変数が真または偽であることを設定するのはよくあります.optarseは2つの独立した動作でそれらをサポートし、store_tureとstore_false.たとえば、verboseタグが-vで開き、-qで閉じる場合があります.
parser.add_option("-v", action="store_true", dest="verbose")
parser.add_option("-q", action="store_false", dest="verbose")
ここでは、同じ変数に対応する2つの異なるオプションがあります.しかしoptparseはコマンドラインで-vに遭遇し、optionsをverboseをTrueに設定します.コマンドラインで-qに遭遇するとoptions.verboseはFalseに設定.
つまり--generateは後でパラメータを持つ必要はありません.その出現は対応する変数が真であることをマークします.
なぜargsの値が「output.xml'の原因です.