Erlang: Hvordan få tilgang til CLI-flagg (argumenter) som applikasjonen miljøvariabler?

stemmer
7

Hvordan får man tilgang til kommandolinjeflagg (argumenter) som miljøvariabler i Erlang. (Som flagg, ikke argv) For eksempel:

RabbitMQ cli ser omtrent slik ut:

erl \
...
-sasl errlog_type error \
-sasl sasl_error_logger '{file,'${RABBITMQ_SASL_LOGS}'}' \
... # more stuff here

Hvis man ser på sasl.erldeg ser linjen:

get_sasl_error_logger() ->
   case application:get_env(sasl, sasl_error_logger) of
% ... etc

Av en eller annen ukjent magi sasl_error_loggervariable blir en Erlang tuppel! Jeg har prøvd å kopiere dette i min egen Erlang application, men jeg synes å være bare i stand til å få tilgang til disse verdiene via init:get_argument, som returnerer verdien som en streng.

Hvordan gjør man pass i verdier via kommandolinjen og være i stand til å få tilgang til dem lett som Erlang betingelser?

OPPDATERING også for alle som ønsker å benytte miljøvariabler i 'vanlig' måte brukos:getenv(THE_VAR)

Publisert på 31/07/2009 klokken 15:13
kilden bruker
På andre språk...                            


1 svar

stemmer
7

Sørg for at du setter opp et program konfigurasjonsfil

{application, fred,
 [{description, "Your application"},
  {vsn, "1.0"},
  {modules, []},
  {registered,[]},
  {applications, [kernel,stdlib]},
  {env, [
    {param, 'fred'}
        ]
...

og så kan du sette ditt kommandolinje opp som dette:

-fred param 'billy'

Jeg tror du må ha parameteren i programkonfigurasjon til å gjøre dette - jeg har aldri gjort det på noen annen måte ...

Litt mer info (lettere enn å sette den i en kommentar)

gitt denne

{emxconfig, {ets, [{keypos, 2}]}},

Jeg kan sikkert gjøre dette:

   {ok, {StorageType, Config}} = application:get_env(emxconfig),

men (og dette kan være viktig) søknaden min er startet på dette tidspunktet (kan faktisk bare trenger å bli lastet, og faktisk ikke startet fra å se på application_controller kode).

Svarte 31/07/2009 kl. 15:56
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more