如何启动Erlang OTP应用程序并允许将命令行参数传递给应用程序的根管理程序?

时间:2012-02-18 06:38:01

标签: erlang otp erlang-escript

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

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

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

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

2 个答案:

答案 0 :(得分: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仅用于解释, not 出现在init:get_plain_argumets/0中。

有关详细信息,请参阅init模块http://www.erlang.org/doc/man/init.html上的文档。

答案 1 :(得分:2)

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

erl -myapp foo bar ...

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