8

私は現在 Python でスクリプトを作成していますが、いくつかの理由で Ruby を試してみたいと思っています。先週、多くのサンプル コードを調べ、多くのドキュメントを読みました。私が懸念している点の 1 つは、Ruby のライブラリを解析する適切なコマンド ライン引数がないことです。Ruby の専門家の皆さん、怒らないでください。それが私がここにいる理由です。

Python では、私はこれを使用することに慣れてargparseいましたが、これは私の意見では完璧です (おそらく私のニーズに合っています)。残念ながら、OptionParser柔軟性と機能を考慮していargparseません。

今のところ、次の制約を具体的に検討しています。

  1. 相互に排他的なオプション リストを作成するにはどうすればよいですか? たとえば、 というプログラムの非常に小さなオプション リストの場合testです。

    usage: test [-h] [-a | -b | -c] [-d] [filename]
    

    次のようなコードを書くことができます。

    # implement a ----------------------------------------------
    opts.on( "-a", "--alpha",
             "implement alpha") do
        #...
    end
    

    等々。しかし、それらの順列をコーディングしてエラー処理を行わない限り、を作成する方法がなく、a相互に排他的です。例えばbc

    test -ab #should through an error
    

    Python では、非常に簡単な方法でこれを行うことができます。

    # create an command line argument parser object
    cmd_line_parser = argparse.ArgumentParser()
    
    # create a mutually exclusive group
    cmd_line_group = cmd_line_parser.add_mutually_exclusive_group()
    
    1. 第二に、この順列のコードを具体的に書かない限り、ペアリング-dする方法がありません。-aこれは非常識です。

    2. [OPTION]リストは自分で書かなければなりません。考えられるすべての入力順列についてブラックボックス テストを実行し、それらをブラックボックス リストにマッピングしない限り、自分が間違っているか正しいかを知る方法はありません。

    3. さらに、強制的な引数は、特別なコードを使用して処理する必要があります。

optparseRubyの他のライブラリを使用してこれらの制約を簡単に処理できますか?

4

1 に答える 1

11

Python と Ruby の両方の実装を持つdocoptライブラリがあります。testプログラムの仕様は次のとおりです。

usage: test [-h] [-a | -b | -c] [-d] [<filename>]

a、b、c オプションは相互に排他的です (-abエラーが発生します)。オプションの組み合わせをサポートしています: -ad-daなど。

filenameパラメータを必須にするには:

usage: test [-h] [-a | -b | -c] [-d] <filename>
于 2013-03-18T22:34:17.737 に答える