1

我想向 erlang vm 发送参数,但 'emu_args: "+A32"' 出现在 "-escript main parallel_tree_walk_escript" 之后,并且似乎成为 elixir 程序的参数,而不是影响 erlang VM。

没有 'emu_args: "+A32"',由 "mix escript.build" 创建的文件包含第三行

%%! -escript main parallel_tree_walk_escript

如果我用 emacs 更改该行(很好地处理非 ascii 内容),我似乎得到了我想要的结果

%%! +A32 -escript main parallel_tree_walk_escript

但是,如果我在 mix.esx 中使用 'emu_args: "+A32",则该行变为

%%! -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

这是行不通的。

4

1 回答 1

0

如果我生成一个 escript 并手动添加-emu_args标志,以与移动标志相同的方式,无论在 escript 名称之前还是之后+A32,我都会得到相同的输出:+A32

# %%! -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标志正在进入虚拟机。

这是我第一次查看 escripts,所以我很好奇 beam 的参数最终以-A32而不是+A32,但这似乎是直接执行模拟器或通过脚本执行模拟器之间的区别。Calling…beam.smp --help确实列出了-A版本以及最后的说明:

请注意,如果模拟器以 erlexec 启动(通常来自 erl 脚本),则应使用 + 指定这些标志。

于 2019-07-10T01:19:29.730 回答