Как передать аргументы командной строки для смешанного запуска --no-halt

Итак, у меня есть модуль приложения, который следует этой схеме:

defmodule Project.Application do


  use Application

  def start(_type, _args) do
    children = [
      randomchild1,
      randomchild2,
      {Project.runapp, "argument" }
    ]

    opts = [strategy: :one_for_all, name: Project.Supervisor]
    Supervisor.start_link(children, opts)
  end
end

Теперь, когда я запускаю это, я использую mix run --no-halt и он отлично работает.

Я хочу заменить "аргумент" значением, которое я передаю в командной строке? Я не могу понять, как добавить аргументы кmix run --no-halt.

Все, что я хочу сделать, это передать значение методу start и использовать его для определения дочернего процесса.

1 ответ

mix добровольно сбрасывает System.argv/1. В--no-haltoption - это специальный способ запуска приложений; обычно мы собираем релизы сmix release и запустить их как обычно с ebin/my_app start.

Пока вы все еще хотите прибегнуть к mix run --no-halt, создайте пустой файл (mix попытается выполнить его при запуске) и вызовет mix нравиться

mix run --no-halt -- "empty.exs" 42

Теперь внутри твоего Application.start/2 вы можете получить аргументы с System.argv/0

def start(_type, args) do
  IO.inspect(System.argv())

  ...

Проверь это.

mix run --no-halt -- "empty.exs" 42
#⇒ ["422"]    
Другие вопросы по тегам