Pregunta

¿Cómo puedo obtener los argumentos de la línea de comando (específicamente en GNU, si hay alguna diferencia) Common Lisp?

¿Fue útil?

Solución

Supongo que está creando scripts con CLisp. Puede crear un archivo que contenga

#! /usr/local/bin/clisp
(format t "~&~S~&" *args*)

Hazlo ejecutable ejecutando

$ chmod 755 <filename>

Ejecutarlo da

$ ./<filename>
NIL
$ ./<filename> a b c
("a" "b" "c")
$ ./<filename> "a b c" 1 2 3
("a b c" "1" "2" "3")

Otros consejos

http://cl-cookbook.sourceforge.net/os.html proporciona alguna idea

  (defun my-command-line ()
  (or 
   #+CLISP *args*
   #+SBCL *posix-argv*  
   #+LISPWORKS system:*line-arguments-list*
   #+CMU extensions:*command-line-words*
   nil))

es lo que estás buscando, creo.

¿Estás hablando de Clisp o GCL? Parece que en GCL los argumentos de la línea de comando se pasan en si :: * command-args * .

En SBCL, podemos usar sb-ext: * posix-argv * para obtener el argv del script lisp común. El sb-ext: * posix-argv * es una lista que contiene todos los argumentos, el primer argumento es el nombre de archivo del script.

Existe la biblioteca Clon mencionada que abstrae mecanismos para cada implementación, y ahora también la unix-opts más simple y un tutorial sobre el Cookbook .

(ql:quickload "unix-opts")

(opts:define-opts
    (:name :help
       :description "print this help text"
       :short #\h
       :long "help")
    (:name :nb
       :description "here we want a number argument"
       :short #\n
       :long "nb"
       :arg-parser #'parse-integer) ;; <- takes an argument
    (:name :info
       :description "info"
       :short #\i
       :long "info"))

Luego, el análisis real se realiza con (opts: get-opts) , que devuelve dos valores: las opciones y los argumentos libres restantes.

Como se ve en https://stackoverflow.com/a/1021843/31615 , cada implementación tiene su propio mecanismo . La forma habitual de lidiar con esto es usar una biblioteca de contenedor que le presente una interfaz unificada.

Dicha biblioteca puede proporcionar más ayuda no solo para leer cosas, sino también para convertirlas y proporcionar resultados útiles para el usuario. Un paquete bastante completo es CLON (que no debe confundirse con CLON o CLON, lo siento), el Nuker de opciones de línea de comandos , que también trae una extensa documentación. Sin embargo, hay otros, si sus necesidades son más ligeras, por ejemplo, command-line-argumentos y apply-argv .

Los paquetes en quicklisp para estos se denominan net.didierverna.clon , command-line-argumentos y apply-argv , respectivamente .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top