Как мне отправить флаги в erlang vm используя: emu_args? - PullRequest
1 голос
/ 09 июля 2019

Я хочу отправить аргументы в erlang vm, но после «-escript main parallel_tree_walk_escript» появляется «emu_args:« + A32 »» и, по-видимому, становится аргументами для программы elixir вместо того, чтобы воздействовать на виртуальную машину erlang.

Без 'emu_args: "+ A32"' файл, созданный "mix escript.build", содержит третью строку

%%! -escript main parallel_tree_walk_escript

Кажется, я получаю нужные результаты, если я изменяю эту строку с помощью emacs(хорошо справляется с содержимым, отличным от ascii) до

%%! +A32 -escript main parallel_tree_walk_escript

Однако, если я использую 'emu_args: "+ A32" в mix.esx, строка становится

%%! -escript main parallel_tree_walk_escript +A32

...и "+ A32", по-видимому, не идет к erlang vm, а вместо этого появляется как первый элемент командной строки массива args.

# permits emacs edit of parallel_tree_walk result
  def escript do
    [
      main_module: ParallelTreeWalk,
    ]
  end

Но это, очевидно, помещает аргумент в неправильное место:

  def escript do
    [
      main_module: ParallelTreeWalk,
      emu_args: "+A32"
    ]
  end

Я надеялся на

%%! +A32 -escript main parallel_tree_walk_escript

, но результат был

%%! -escript main parallel_tree_walk_escript +A32

, который не работает.

1 Ответ

0 голосов
/ 10 июля 2019

Если я сгенерирую escript и вручную добавлю флаг -emu_args, так же, как вы переместили флаг +A32, я получу тот же вывод независимо от того, находится ли +A32 до или после имени escript:

# %%! -emu_args -escript main test_escript +A32 
# %%! +A32 -emu_args -escript main test_escript

Оба производят (укороченные некоторые пути для краткости):

Executing: …beam.smp ./test -B -A32 -- -root …erlang/21.3 -progname erl -- -home /Users/adam -- -boot no_dot_erlang -noshell -escript main test_escript -run escript start -extra ./test

Может быть, вы можете попробовать добавить параметр emu_args, чтобы увидеть, что происходит. Возможно, флаг +A32 попадает в виртуальную машину.

Это первый раз, когда я смотрел на сценарии, поэтому мне было любопытно, что аргумент для луча закончился как -A32 вместо +A32, но это похоже на разницу между выполнением эмулятора напрямую или через скрипт. Вызов …beam.smp --help действительно перечисляет версию -A вместе с последней заметкой, которая гласит:

Обратите внимание, что если эмулятор запускается с erlexec (обычно из сценария erl) эти флаги должны быть указаны с помощью +.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...