Clojure(Rubyから)を使い始めたばかりで、コマンドラインインターフェイスを備えた小さなアプリを作成したいと思います。CLへの入出力を処理するにはどうすればよいですか?
clojure.contrib.command-lineがあることに気づきましたが、ドキュメントはスリムです。
Clojure(Rubyから)を使い始めたばかりで、コマンドラインインターフェイスを備えた小さなアプリを作成したいと思います。CLへの入出力を処理するにはどうすればよいですか?
clojure.contrib.command-lineがあることに気づきましたが、ドキュメントはスリムです。
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で。フラグ自体には「?」が含まれていないことに注意してください。その名前の一部として。
$ 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]
古いclojure.contrib.command-lineはtools.cliに置き換えられました。
https://github.com/clojure/tools.cli
tools.cliは以前はclargonと呼ばれていました。以下は、tools.cliの使用例を示す2つのブログ投稿です(clargonへの参照をtools.cliに置き換えるだけです。投稿は古くなっています)。
私はあなたができることを付け加えたいと思います
(apply -main *command-line-args*)
(defn -main ...)
解釈モードで動作させるには、以下を参照してください。
質問が提起されてから長い間、docopt
CLIインターフェイスの構築に関してはライブラリを使用することを提案できます。Clojure用のものがあります-docopt.clj
docoptは、プログラムインターフェイスの説明用のヘルプメッセージやマニュアルページで何十年も使用されている規則に基づいています。docoptのインターフェース記述はそのようなヘルプメッセージですが、形式化されています
したがって、インターフェースを宣言し、同時にそれを文書化することができます-それは驚くべきことであり、簡単です。
詳細については、http://docopt.org/を確認することをお勧めします
また、インターフェースをチェックするためのオンラインアプリがありますhttp://try.docopt.org/
そして最後に、Clojurelibの使用方法の例を示します。
多分ジャークを試してみてください。Jarkは、永続的なJVMでclojureプログラムを実行するためのツールです。いくつかの便利なコマンドラインユーティリティがあります。
jark ns load file.clj
jark <namespace>.<function> <args>
jark if cli-json <namespace><function> args