Я только начал работать с Clojure (пришедшим из Ruby) и хотел бы создать небольшое приложение с интерфейсом командной строки. Как мне обрабатывать ввод / вывод в CL?
Я заметил, что есть командная строка clojure.contrib.com, но документации мало.
Я только начал работать с Clojure (пришедшим из Ruby) и хотел бы создать небольшое приложение с интерфейсом командной строки. Как мне обрабатывать ввод / вывод в CL?
Я заметил, что есть командная строка clojure.contrib.com, но документации мало.
Ответы:
Вот пример использования его
with-command-line
макроса. Следующий код определяет тривиальный класс с основным методом, который ничего не делает, кроме вывода значений его аргументов командной строки.(ns cmd-line-demo (:gen-class) (:use clojure.contrib.command-line)) (defn -main [& args] (with-command-line args "Command line demo" [[foo "This is the description for foo" 1] [bar "This is the description for bar" 2] [boolean? b? "This is a boolean flag."] remaining] (println "foo: " foo) (println "bar: " bar) (println "boolean?: " boolean?) (println "remaining: " remaining)))
Скомпилируйте класс в REPL:
user> (compile 'cmd-line-demo) cmd-line-demo
Пример использования
1) Выполнение без аргументов командной строки приведет к отображению справочной информации. Справочная информация также может отображаться с помощью флажков
--help
или-h
. Обратите внимание, что справочная информация автоматически создается из вашей cmdspec.$ java -classpath . cmd_line_demo Command line demo Options --foo <arg> This is the description for foo [default 1] --bar <arg> This is the description for bar [default 2] --boolean, -b This is a boolean flag.
2) Неуказанные аргументы получают значение по умолчанию, как указано в привязке cmdspec. Например,
bar
имеет значение по умолчанию2
.$ java -classpath . cmd_line_demo --foo "changed value" foo: changed value bar: 2 boolean?: nil remaining: []
3) Булевы флаги обозначаются суффиксом "?" в cmdspec. Обратите внимание, что сам флаг не включает "?" как часть его названия.
$ java -classpath . cmd_line_demo -boolean foo: 1 bar: 2 boolean?: true remaining: []
4) Также обратите внимание, что вы можете указать псевдонимы флагов, указав несколько символов в cmdspec. Я сделал это с
boolean?
иb?
флагами.5) Наконец, я указал, что
remaining
захват всех оставшихся аргументов без связанных флагов.$ java -classpath . cmd_line_demo -foo test file1 file2 file3 foo: test bar: 2 boolean?: nil remaining: [file1 file2 file3]
источник
Старая строка команды clojure.contrib.com заменена на tools.cli.
https://github.com/clojure/tools.cli
tools.cli раньше назывался кларгоном. Ниже приведены два сообщения в блоге, в которых приведены примеры использования tools.cli (просто замените любую ссылку на Clargon на tools.cli. Сообщения устарели).
Здесь показано несколько способов, включая старую строку clojure.contrib.command-line
Сообщение оригинального автора о Clargon
источник
Хочу добавить, что ты можешь сделать
(apply -main *command-line-args*)
ниже,
(defn -main ...)
чтобы заставить его работать в интерпретируемом режиме.источник
Спустя долгое время после того, как вопрос был поднят, я могу предложить использовать
docopt
библиотеки, когда дело доходит до создания интерфейса командной строки. Там является один для Clojure -docopt.clj
Таким образом, вы можете объявить свой интерфейс и задокументировать его одновременно - это потрясающе и легко.
Для получения дополнительной информации я рекомендую проверить http://docopt.org/
Также есть онлайн-приложение для проверки вашего интерфейса http://try.docopt.org/
И, наконец, вот мой пример того, как можно использовать Clojure lib.
источник
Может, попробуй джарк. Jark - это инструмент для запуска программ закрытия на постоянной JVM. В нем есть несколько полезных утилит командной строки.
https://clojars.org/jark
источник