gpt4 book ai didi

具有多个子命令的 Clojure CLI

转载 作者:行者123 更新时间:2023-12-05 02:28:05 35 4
gpt4 key购买 nike

我在 clojure 中编写了一些库,将一些搜索结果作为一个小的副项目进行抓取。我想在 cli 中使用这些库,其中可以运行一些不同的脚本,例如:

  • 收集、运行抓取作业,
  • 浏览,浏览以前收集的结果,
  • 搜索配置,添加或删除搜索参数。

我想将解决方案实现为命令行界面,如下所示:

cljscrape [general flags] subcommand [flags] [args]

我知道您可以使用 this post 中所述的软件包,但它似乎只解析标志。如果有人可以推荐如何构建项目,或者可以让我最好地模仿模板格式的包,那就太棒了!

附言

我对 Clojure 很陌生,所以如果我说了任何愚蠢的话,我深表歉意。谢谢! :)

最佳答案

使用 babashka CLI 的示例:

(def args ["--general-flag" "subcommand" "--flag" "arg"])

(require '[babashka.cli :as cli])

var args 包含一些示例参数。通常,您将从 *command-line-args* 或传递给 -main 函数的参数中获取这些信息。

首先解析通用选项:

(def parsed (cli/parse-args args {:coerce {:general-flag :boolean}}))
;;=> {:opts {:general-flag true}, :args ["subcommand" "--flag" "arg"]}

请注意,在 :opts 中,我们现在拥有已解析的常规选项,其余参数(仍未解析)保存在 :args 中。

当我们再次用parse-args依次解析那些:args时,我们得到子命令、选项和参数:

(cli/parse-args (:args parsed) {:coerce {:flag :boolean}})
;;=> {:cmds ["subcommand"], :opts {:flag true}, :args ["arg"]}

因此您可以使用这个两步过程来支持一般论点。要分派(dispatch)子命令,您可以阅读文档 here .您可以在 neil 中看到正在运行的调度函数。项目。对于这个例子,它会是这样的:

(def dispatch-table
[{:cmds ["subcommand"] :fn handle-subcommand}])

(cli/dispatch dispatch-table (:args parsed) {:coerce {:flag :boolean}})

然后将使用参数 {:opts {:flag true}, :args ["arg"]} 调用函数 handle-subcommand

关于具有多个子命令的 Clojure CLI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72765147/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com