如何将非可选cli参数与可选参数混合?

时间:2012-08-24 15:31:11

标签: clojure command-line-interface

使用tools.cli,我怎样才能用可选的参数创建非可选参数?

我有一个功能

(defn parse-opts
  [args]
  (cli args
  ["-f" "--ifn" "input file"]
 (optional ["-o" "--outp" ".csv pipe delimited output file" 
      :default "assess_pro_out.csv"] identity)
 (optional ["-d" "--debug" "Debug flag for logging." :default 0 
      :parse-fn #(Integer. %)])))

编译但生成

Exception in thread "main" clojure.lang.ArityException: 
Wrong number of args (2) passed to: PersistentVector

当我在没有参数的情况下运行我的主程序时。

如果此选项与其他选项一样

(optional ["-f" "--ifn" "input file"] identity)

一切正常。

我只想要一个参数是非可选的。我做错了什么?

我确实有一个解决方法,但我仍然想知道将可选和非可选参数混合到cli是否可以。

(defn -main 
[& args]
(let [opts (parse-opts args)
      start-time (str (Date.))
      parsed-csv-data (if-not (:ifn opts)
                       (do
                       (println "Usage: assess-chk [-f -ifn] input-file-name")
                       (System/exit -2))
                       (utl/fetch-csv-data (:ifn opts)))

感谢。

1 个答案:

答案 0 :(得分:2)

您使用的是旧版本的tools.cli(可能是v0.1.0)。对于 版本,您似乎应该使用(required ...)作为必需选项。请参阅https://github.com/clojure/tools.cli/tree/a741b23f230123179fc518af772f1c057058f7d2

上的文档

在当前版本的tools.cli中,选项始终是可选的,并且删除了可选和必需的功能。