Как запустить приложение Erlang OTP и разрешить передачу аргументов командной строки корневому супервизору приложения?

Быстрый 1 вкладыш: как запустить приложение OTP и передать ему аргументы командной строки?

Я хотел, чтобы у меня была возможность запускать приложение OTP обычным способом "UNIX", с возможностью передавать аргументы командной строки, проанализированные getopts. Итак, у меня есть erlang escript, который использует библиотеку getopt для обработки парсинга аргументов командной строки.

Ответ Шино направил меня на правильный путь:

  1. У меня есть мой скрипт сделать анализ getopts
  2. Затем скрипт загружает описание приложения в память вместе с приложением:load/1
  3. Затем я использую application:set_env/3 для хранения аргументов CLI.
  4. Теперь запустите приложение с приложением:start/2
  5. После запуска приложения доступ к аргументам можно получить через приложение:get_env/2

2 ответа

Решение

Вы также можете переопределить параметры среды приложения в командной строке:

erl -myapp foo bar ...

Это установит application.get_env(myapp, foo) в "bar", переопределяя любой параметр app.config.

Ты можешь использовать init:get_plain_arguments/0 функция для доступа к аргументам командной строки (дополнительные).

Пример:

$ erl -sname example -extra extra args here
Erlang R15B (erts-5.9) [source] [64-bit] [smp:2:2] [async-threads:0] [kernel-poll:false]

Eshell V5.9  (abort with ^G)
(example@localhost)1> init:get_plain_arguments().
["extra","args","here"]

init:get_plain_argumets/0 возвращает аргументы после -extra вариант в виде списка строк. вариант sname только для объяснения, которое не появляется в init:get_plain_argumets/0,

Для более подробной информации см. Документ на init модуль http://www.erlang.org/doc/man/init.html.

Другие вопросы по тегам