2013-03-18 5 views
6

私は現在Pythonでスクリプトを書いていますが、いくつかの理由でRubyを試してみたいと考えています。先週、たくさんのサンプルコードを見て、たくさんのドキュメントを読んできました。私が心配している点の1つは、Rubyで適切なコマンドライン引数を解析するライブラリがないことです。 Rubyのエキスパート、私に怒らないでください - 多分私は知らないでしょう。それが私がここにいる理由です。Ruby optparse制限

Pythonでは、私は​​を使用するのに慣れていましたが、これは私の意見では単に(おそらく私の必要性のために)完璧です。残念ながら、OptionParserは、​​が行う柔軟性と機能を考慮していません。

私は、具体的には今のところ、以下の制約で探しています:

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

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

    私のようないくつかのコードを書くことができますように

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

    と。しかし、私はabcをそれらの順列をコーディングして何らかのエラー処理をしない限り、相互に排他的にする方法はありません。例えば、

    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. 、私は-aとのペアリング-dの手立てをしたん、私は特にこの順列のためのコードを記述しない限り、 。これは気違いです。

    2. 自分で[OPTION]のリストを書いたことがあります。すべての可能な入力順列についてブラックボックステストを行い、それらをブラックボックスリストにマップしない限り、私が間違っているか正しくないかどうかを知る方法はありません。

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

Rubyでoptparseを使用してこれらの制約を扱うのは簡単や他のライブラリはありますか?

答えて

10

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

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

、B、Cオプションは(-abがエラーを生成する)相互に排他的であり、それは組み合わせのオプションをサポートします。-ad-da、等

filenameを作るためにパラメータ必須:

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

ワウ。それは気違いです。エピック。期間。 私はずっとずっと何をしてきたのですか?すごいです。どうもありがとう。 – p0lAris