web-dev-qa-db-ja.com

コマンドラインインターフェイスを使用してClojureアプリを作成していますか?

Clojure(Rubyから)を使い始めたばかりですが、コマンドラインインターフェースで小さなアプリを作成したいと考えています。 CLへの入出力をどのように処理しますか?

Clojure.contrib.command-lineがあることに気づきましたが、ドキュメントはスリムです。

http://github.com/richhickey/clojure-contrib/blob/ffa868411cda6c617105b52b4f6f9e0f37ee8c24/src/clojure/contrib/command_line.clj

78
dMix

with-command-lineマクロの使用例を次に示します。次のコードは、コマンドライン引数の値を出力するだけのmainメソッドを備えた自明なクラスを指定しています。

(ns cmd-line-demo
  (:gen-class)
  (:use clojure.contrib.command-line))

(defn -main [& args]
  (with-command-line args
      "Command line demo"
      [[foo "This is the description for foo" 1]
       [bar "This is the description for bar" 2]
       [boolean? b? "This is a boolean flag."]
       remaining]
    (println "foo: " foo)
    (println "bar: " bar)
    (println "boolean?: " boolean?)
    (println "remaining: " remaining)))

REPLでクラスをコンパイルします。

user> (compile 'cmd-line-demo)
cmd-line-demo

使用例

1)コマンドライン引数なしで実行すると、ヘルプ情報が表示されます。ヘルプ情報は、--helpまたは-hフラグを使用して表示することもできます。ヘルプ情報は、cmdspecから自動的に生成されることに注意してください。

$ Java -classpath . cmd_line_demo
Command line demo
Options
  --foo <arg>    This is the description for foo  [default 1]
  --bar <arg>    This is the description for bar  [default 2]
  --boolean, -b  This is a boolean flag.  

2)未指定の引数は、cmdspecバインディングで指定されたデフォルト値を受け取ります。たとえば、barのデフォルト値は2です。

$ Java -classpath . cmd_line_demo --foo "changed value"
foo:  changed value
bar:  2
boolean?:  nil
remaining:  []

3)ブールフラグは接尾辞「?」で示されます。 cmdspec内。フラグ自体はnotに「?」を含めていることに注意してください。その名前の一部として。

$ Java -classpath . cmd_line_demo -boolean
foo:  1
bar:  2
boolean?:  true
remaining:  []

4)また、cmdspecで複数のシンボルを指定することにより、フラグエイリアスを指定できることに注意してください。 boolean?フラグとb?フラグを使用してこれを行いました。

5)最後に、remainingに関連するフラグなしで残りのすべての引数をキャプチャするように指定しました。

$ Java -classpath . cmd_line_demo -foo test file1 file2 file3
foo:  test
bar:  2
boolean?:  nil
remaining:  [file1 file2 file3]
119
alanlcode

古いclojure.contrib.command-lineはtools.cliに置き換えられました。

https://github.com/clojure/tools.cli

tools.cliは、以前はclargonと呼ばれていました。以下は、tools.cliの使用例を示す2つのブログ投稿です(clargonへの参照を単純にtools.cliに置き換えます。投稿は古くなっています)。

これは、古いclojure.contrib.command-lineを含むいくつかの方法を示しています

元の作者によるClargonに焦点を合わせた投稿

32
Jake McCrary

あなたができることを追加したいと思います

(apply -main *command-line-args*)

インタープリットモードで機能させるには、(defn -main ...)の下にあります。

12
Pepijn

質問が提起されてからしばらくして、CLIインターフェイスの構築に関してはdocoptライブラリを使用することをお勧めします。あり Clojure用の1つ-docopt.clj

docoptは、ヘルプメッセージやプログラムインターフェイスの説明のマニュアルページで何十年も使用されている規則に基づいています。 docoptのインターフェイスの説明はそのようなヘルプメッセージですが、形式化されています

したがって、インターフェースを宣言し、同時にドキュメント化することができます。これは驚くべきことであり、簡単に実行できます。

詳細については、チェックすることをお勧めします http://docopt.org/

また、あなたのインターフェースをチェックするためのオンラインアプリもあります http://try.docopt.org/

そして最後に これが私の例です Clojure libの使用方法。

7
signalpillar

多分ジャークを試してみてください。 Jarkは、永続的なJVMでclojureプログラムを実行するためのツールです。いくつかの便利なコマンドラインユーティリティがあります。

https://clojars.org/jark

jark ns load file.clj
jark <namespace>.<function> <args>
jark if cli-json <namespace><function> args 
1
icylisper