dMi*_*Mix 78 clojure clojure-contrib
我刚刚开始使用Clojure(来自Ruby),我想用命令行界面构建一个小应用程序.如何处理CL的输入/输出?
我注意到有一个clojure.contrib.command-line,但文档很小.
ala*_*ode 119
以下是使用其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)))
Run Code Online (Sandbox Code Playgroud)
在REPL编译类:
user> (compile 'cmd-line-demo)
cmd-line-demo
Run Code Online (Sandbox Code Playgroud)
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.
Run Code Online (Sandbox Code Playgroud)
2)未指定的参数接收cmdspec绑定中指定的默认值.例如,bar默认值为2.
$ java -classpath . cmd_line_demo --foo "changed value"
foo: changed value
bar: 2
boolean?: nil
remaining: []
Run Code Online (Sandbox Code Playgroud)
3)布尔标志用后缀"?"表示 在cmdspec中.请注意,标志本身并没有包含"?" 作为其名称的一部分.
$ java -classpath . cmd_line_demo -boolean
foo: 1
bar: 2
boolean?: true
remaining: []
Run Code Online (Sandbox Code Playgroud)
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]
Run Code Online (Sandbox Code Playgroud)
Jak*_*ary 32
旧的clojure.contrib.command-line已被tools.cli取代.
https://github.com/clojure/tools.cli
tools.cli曾经被称为clargon.下面是两个博客文章,提供了使用tools.cli的示例(使用tools.cli简单替换对clargon的任何引用.帖子已过期).
这显示了一些方法,包括旧的clojure.contrib.command-line
Pep*_*ijn 12
我想补充一点,你可以做到
(apply -main *command-line-args*)
Run Code Online (Sandbox Code Playgroud)
在(defn -main ...)它下面使它在解释模式下工作.
小智 7
问题提出很久之后,我建议docopt在构建CLI界面时使用库.Clojure有一个 -docopt.clj
docopt基于在帮助消息和程序界面描述的手册页中使用了数十年的约定.docopt中的接口描述是这样的帮助消息,但是已经形式化
因此,您可以声明您的界面并在同一时间记录它 - 这很棒且容易做到.
有关详细信息,我建议您查看http://docopt.org/
还有一个在线应用程序来检查您的界面http://try.docopt.org/
最后,这是我的示例如何使用Clojure lib.
| 归档时间: |
|
| 查看次数: |
13567 次 |
| 最近记录: |