簡體   English   中英

使用命令行界面構建Clojure應用程序?

[英]Building a Clojure app with a command-line interface?

我剛剛開始使用Clojure(來自Ruby),我想用命令行界面構建一個小應用程序。 如何處理CL的輸入/輸出?

我注意到有一個clojure.contrib.command-line,但文檔很小。

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

以下是使用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?做了這個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的示例(使用tools.cli簡單替換對clargon的任何引用。帖子已過期)。

這顯示了一些方法,包括舊的clojure.contrib.command-line

由原作者專注於Clargon

我想補充一點,你可以做到

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

(defn -main ...)下方使其在解釋模式下工作。

問題提出很久之后,我建議在構建CLI界面時使用docopt庫。 Clojure一個 - docopt.clj

docopt基於在幫助消息和程序界面描述的手冊頁中使用了數十年的約定。 docopt中的接口描述是這樣的幫助消息,但是已經形式化

因此,您可以聲明您的界面並在同一時間記錄它 - 這很棒且容易做到。

有關詳細信息,我建議您查看http://docopt.org/

還有一個在線應用程序來檢查您的界面http://try.docopt.org/

最后, 這是我的示例如何使用Clojure lib。

也許試試jark。 Jark是一個在持久性JVM上運行clojure程序的工具。 它有一些有用的命令行實用程序。

https://clojars.org/jark

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM