3

Quick 1 liner:如何启动 OTP 应用程序并将命令行参数传递给它?

我希望能够以通用的“UNIX”方式启动 OTP 应用程序,能够传递由 getopts 解析的命令行参数。所以,我有一个 erlang escript,它使用getopt库来处理命令行参数的解析。

shino 的回答让我走上了正确的道路:

  1. 我有我的 escript 做 getopts 解析
  2. 然后,escript 使用 application:load/1 将应用程序描述加载到内存中
  3. 然后我使用 application:set_env/3 来存储 CLI args
  4. 现在,使用 application:start/2 启动应用程序
  5. 应用程序启动后,可以通过 application:get_env/2 访问参数
4

2 回答 2

2

您可以使用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上的文档。

于 2012-02-18T12:26:15.567 回答
2

您还可以在命令行上覆盖应用程序环境设置:

erl -myapp foo bar ...

这会将 application.get_env(myapp, foo) 设置为“bar”,覆盖任何 app.config 设置。

于 2012-02-18T15:39:57.637 回答