如何在Common Lisp中移植命令行参数和标志?

马修·洛克

我想在Common Lisp中获取和解析命令行参数,以便例如myscript -a 1 -b 2使我能够获取值,并且myscript -xyz也可以工作。我该如何移植(在编译器之间)?

核心转储

你可以试试看unix-options

(ql:quickload :unix-options)

(defpackage :test
  (:use :cl)
  (:import-from :unix-options
                :&parameters
                :&free
                :with-cli-options))

您可能想要使用:use该软件包,但是如果您想从中导入符号,请不要忘记&free&parameters该库定义了一个getopt与传统getopt实用程序相似的功能。但它也定义了with-cli-options,这有点困难。

  • 第一组符号定义选项,即不存在或存在的标志;
  • &parameters定义参数后的符号,必须后跟一个值;
  • 列表中绑定了由以下项指定的变量的参数不可用,这些参数不能识别为选项或参数: &free

例如:

(in-package :test)

(defun my-program (&rest cli-args)
  (with-cli-options (cli-args)
      (x y z &parameters a b &free other)
    (list x y z a b other))))

在这里,我定义了程序的入口点。在实际程序中,您可以将第一个列表保留为空,如下所示:

(with-cli-options () <bindings> <body>) 

...,然后将从Lisp实现的实际命令行参数中获取选项。您还可以调用(uiop:command-line-arguments)必须具有完整的命令行,该命令行似乎支持更多的实现,并且将程序名称作为第一个元素。上面的功能允许我测试解析器的行为。请注意,例如,短选项可以分开或合并:

(my-program "-xyz" "-a" "2" "-b" "3" "--" "something")
=> (T T T "2" "3" ("something"))

(my-program "-x" "-y" "-z" "-a" "2" "-b" "3" "--" "something")
=> (T T T "2" "3" ("something"))

请注意声明为参数但未提供实际值的选项(或者可能是,情况不明确):

(my-program "-a" "-b")
=> (NIL NIL NIL "-b" NIL NIL)

有针对未知参数的警告:

(ignore-errors (my-program "-w"))
; WARNING: Invalid option: w
=> (NIL NIL NIL NIL NIL NIL)

有关详细信息,请参阅文档。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Lua中捕获和匹配长命令行参数?

来自分类Dev

如何在Raku(以前称为Perl 6)中解析和验证命令行参数?

来自分类Dev

如何在bash中拦截和删除命令行参数

来自分类Dev

如何在bash中拦截和删除命令行参数

来自分类Dev

如何在kubernetes中传递命令行参数?

来自分类Dev

如何在.csx脚本中访问命令行参数?

来自分类Dev

如何在Wix中添加命令行参数

来自分类Dev

如何在SICStus Prolog中访问命令行参数?

来自分类Dev

如何在StatET中设置R命令行参数

来自分类Dev

如何在锡兰中获取命令行参数?

来自分类Dev

如何在Spring配置中访问命令行参数?

来自分类Dev

如何在OMNET ++中添加专门的命令行参数?

来自分类Dev

如何在OpenVMS Fortran中获取命令行参数?

来自分类Dev

如何在awk脚本中传递命令行参数

来自分类Dev

如何在Dart中解析命令行参数?

来自分类Dev

如何在python中对命令行参数进行分组?

来自分类Dev

如何在Python中读取整数命令行参数?

来自分类Dev

如何在Shell Sript中读取命令行参数

来自分类Dev

如何在数组中存储命令行参数

来自分类Dev

如何在命令行中传递分组参数

来自分类Dev

如何在 sbatch 命令行中传递参数?

来自分类Dev

CLI 功能:如何在同一命令行中运行多个标志

来自分类Dev

如何在OSX命令行上使用--watch标志?

来自分类Dev

如何从带有Rscript和命令行参数的命令行使用knitr?

来自分类Dev

如何获取在C中运行的用于输入和输出文件的命令行参数

来自分类Dev

如何通过使用和创建函数来计算命令行参数中的字符数

来自分类Dev

如何分配包含!的命令行参数 和&变量?

来自分类Dev

命令行参数和默认值(如何重置)

来自分类Dev

如何创建一个接受参数的新pytest命令行标志

Related 相关文章

  1. 1

    如何在Lua中捕获和匹配长命令行参数?

  2. 2

    如何在Raku(以前称为Perl 6)中解析和验证命令行参数?

  3. 3

    如何在bash中拦截和删除命令行参数

  4. 4

    如何在bash中拦截和删除命令行参数

  5. 5

    如何在kubernetes中传递命令行参数?

  6. 6

    如何在.csx脚本中访问命令行参数?

  7. 7

    如何在Wix中添加命令行参数

  8. 8

    如何在SICStus Prolog中访问命令行参数?

  9. 9

    如何在StatET中设置R命令行参数

  10. 10

    如何在锡兰中获取命令行参数?

  11. 11

    如何在Spring配置中访问命令行参数?

  12. 12

    如何在OMNET ++中添加专门的命令行参数?

  13. 13

    如何在OpenVMS Fortran中获取命令行参数?

  14. 14

    如何在awk脚本中传递命令行参数

  15. 15

    如何在Dart中解析命令行参数?

  16. 16

    如何在python中对命令行参数进行分组?

  17. 17

    如何在Python中读取整数命令行参数?

  18. 18

    如何在Shell Sript中读取命令行参数

  19. 19

    如何在数组中存储命令行参数

  20. 20

    如何在命令行中传递分组参数

  21. 21

    如何在 sbatch 命令行中传递参数?

  22. 22

    CLI 功能:如何在同一命令行中运行多个标志

  23. 23

    如何在OSX命令行上使用--watch标志?

  24. 24

    如何从带有Rscript和命令行参数的命令行使用knitr?

  25. 25

    如何获取在C中运行的用于输入和输出文件的命令行参数

  26. 26

    如何通过使用和创建函数来计算命令行参数中的字符数

  27. 27

    如何分配包含!的命令行参数 和&变量?

  28. 28

    命令行参数和默认值(如何重置)

  29. 29

    如何创建一个接受参数的新pytest命令行标志

热门标签

归档