80

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

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

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

4

5 に答える 5

121

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]
于 2009-08-27T19:46:34.833 に答える
34

古い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に焦点を当てた投稿

于 2011-06-29T13:04:57.090 に答える
12

私はあなたができることを付け加えたいと思います

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

(defn -main ...)解釈モードで動作させるには、以下を参照してください。

于 2010-09-17T07:46:27.917 に答える
8

質問が提起されてから長い間、docoptCLIインターフェイスの構築に関してはライブラリを使用することを提案できます。Clojure用のものがあります-docopt.clj

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

したがって、インターフェースを宣言し、同時にそれを文書化することができます-それは驚くべきことであり、簡単です。

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

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

そして最後に、Clojurelibの使用方法の例を示します。

于 2013-09-17T08:13:15.080 に答える
1

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

https://clojars.org/jark

jark ns load file.clj
jark <namespace>.<function> <args>
jark if cli-json <namespace><function> args 
于 2011-03-25T05:28:32.797 に答える