如何显示选项缺少参数的错误?
How to show error on missing parameters for options?
我是一个绝对的 Clojure 初学者,我正在尝试使用 clojure.tools.cli 库构建一个 CLI 应用程序。
我的问题是,当一个选项没有提供必需的参数时,我无法显示任何错误。
我想要的:
$ java -jar test.jar -m SAMPLE
Given file: SAMPLE
$ java -jar test.jar -m
ERROR: Please provide a file
会发生什么:
$ java -jar test.jar -m SAMPLE
Given file: SAMPLE
$ java -jar test.jar -m
$
它没有显示任何内容。
这是我的代码:
(ns obmed-clj.core
(:require [clojure.tools.cli :refer [parse-opts]])
(:gen-class))
(def cli-options
[["-m" "--menu FILE" "Provide menu file path"
:parse-fn #(if (nil? %)
(println "ERROR: Please provide a file")
%)
:validate-fn #(println "Given file:" %)]])
(defn -main [& args]
(parse-opts args cli-options))
您有点滥用这里的 -fn
论点。它们的用途是转换 "string"(在您的情况下,因为您有 "--menu FILE"
),然后对其进行额外的验证(而是使用 :validate [fn msg]
)。例如:
user=> (def cli-opts [["-m" "--menu FILE" "menu file"
:parse-fn #(java.io.File. %)
:validate [#(.exists %) "file must exist"]]])
#'user/cli-opts
缺少参数:
user=> (parse-opts ["-m"] cli-opts)
{:arguments [],
:errors ["Missing required argument for \"-m FILE\""],
:options {},
:summary " -m, --menu FILE menu file"}
文件不存在:
user=> (parse-opts ["-m" "XXX"] cli-opts)
{:arguments [],
:errors ["Failed to validate \"-m XXX\": file must exist"],
:options {},
:summary " -m, --menu FILE menu file"}
一切顺利:
user=> (parse-opts ["-m" "/etc/hosts"] cli-opts)
{:arguments [],
:errors nil,
:options {:menu #<java.io.File@34d63c80 /etc/hosts>},
:summary " -m, --menu FILE menu file"}
我是一个绝对的 Clojure 初学者,我正在尝试使用 clojure.tools.cli 库构建一个 CLI 应用程序。
我的问题是,当一个选项没有提供必需的参数时,我无法显示任何错误。
我想要的:
$ java -jar test.jar -m SAMPLE
Given file: SAMPLE
$ java -jar test.jar -m
ERROR: Please provide a file
会发生什么:
$ java -jar test.jar -m SAMPLE
Given file: SAMPLE
$ java -jar test.jar -m
$
它没有显示任何内容。
这是我的代码:
(ns obmed-clj.core
(:require [clojure.tools.cli :refer [parse-opts]])
(:gen-class))
(def cli-options
[["-m" "--menu FILE" "Provide menu file path"
:parse-fn #(if (nil? %)
(println "ERROR: Please provide a file")
%)
:validate-fn #(println "Given file:" %)]])
(defn -main [& args]
(parse-opts args cli-options))
您有点滥用这里的 -fn
论点。它们的用途是转换 "string"(在您的情况下,因为您有 "--menu FILE"
),然后对其进行额外的验证(而是使用 :validate [fn msg]
)。例如:
user=> (def cli-opts [["-m" "--menu FILE" "menu file"
:parse-fn #(java.io.File. %)
:validate [#(.exists %) "file must exist"]]])
#'user/cli-opts
缺少参数:
user=> (parse-opts ["-m"] cli-opts)
{:arguments [],
:errors ["Missing required argument for \"-m FILE\""],
:options {},
:summary " -m, --menu FILE menu file"}
文件不存在:
user=> (parse-opts ["-m" "XXX"] cli-opts)
{:arguments [],
:errors ["Failed to validate \"-m XXX\": file must exist"],
:options {},
:summary " -m, --menu FILE menu file"}
一切顺利:
user=> (parse-opts ["-m" "/etc/hosts"] cli-opts)
{:arguments [],
:errors nil,
:options {:menu #<java.io.File@34d63c80 /etc/hosts>},
:summary " -m, --menu FILE menu file"}