Как передать аргументы командной строки для смешанного запуска --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-halt
option - это специальный способ запуска приложений; обычно мы собираем релизы с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"]